2011-07-30 62 views
1

我使用ajax調用生成了我的所有網頁,並且從不刷新我的頁面。我的設置是一樣的東西如何使用php生成html以在ajax調用後返回

HTML:<a id="user_click_here">test link</a>

JQUERY:

$("#user_click_here").live("click", function(event){ 
    console.log("click on test link"); 
    ajax_function("action=return_some_html"); 
}); 

AJAX的函數調用PHP的,我在那裏創建HTML。我與之奮鬥的是用php生成html。我嘗試使用這個:

PHP:

$html = <<<HTML 

    <div class="box"> 
     <h2> 
      <a href="#" id="remove">$text[0]</a> 
     </h2> 
     <div class="block"> 

     <div style="float:left; width: 35%; margin:5px; padding: 1em; background: white;"> 

HTML; 

    $html .= '<p>Username: <a id="username">' . $_SESSION['username'] . '</a></p>';  


    $html .= <<<HTML 


      <div style="float:left; width: 30%; margin:5px;"> 
       <p> 
        Level:<br /> 
        Weapon:<br /> 
        Power:<br /> 
        Bullets:<br /> 
       </p> 
      </div> 
      <div style="float:right; width: 60%; margin:5px;"> 
       <p> 

HTML; 

    $html .= '<b id="level">empty</b><br/>';  


    $html .= <<<HTML  <---ERROR HERE unexpected '<<' 



        Weapon blabla<br /> 
        2 - 5<br /> 
        3/6<br /> 
       </p> 
      </div> 
     </div> 

我傾向於只是嘗試和失敗,直到其與此<<<WHATEVER作品(不記得它叫什麼)。像現在一樣,出於某種原因我得到了一個unexpected '<<'錯誤。

我必須用這個方法:

$html = '<div class="box"> 
     <h2> 
      <a href="#" id="remove">' . $text[0] . '</a> 
     </h2> 
     <div class="block"> 

     <div style="float:left; width: 35%; margin:5px; padding: 1em; background: white;">'; 

什麼是在PHP中保存HTML並將其發送回jquery的最佳方式。

我現在發送的HTML這樣的:

PHP:

$data = array("html" => $html); 
     return json_encode($data); 

關我當然希望它壓縮儘可能,最好是沒有任何東西是這樣的:\n\t\t\t\t佔用空間。

編輯:

確定。我不認爲每個人都注意到這是一個阿賈克斯調用,我必須返回一個json元素。我不能做普通<?php php code ?> html code <?php more php ?> some html

回答

2

它看起來像你的最後HEREDOC(這是什麼<<<語法稱爲)是未封閉的,缺少的是

HTML; 

而且不要忘了,最後HTML;不能有任何之前或之後的同一行上的空格。

但是,你所做的一切都是錯誤的。關於HEREDOC語法的好處是您可以將所有變量嵌入到其中,而無需任何串聯。只需在一個HEREDOC中創建整個事物並將其回顯給jQuery。如果您只是在通過AJAX調用接收到HTML時將其用作HTML,則不需要製作JSON。

以上所有代碼均位於一個$html = <<<HTML區塊內。將所有複雜變量都包含在 {$_SESSION['whatever']}中,如$_SESSION['whatever']

$html = <<<HTML 

<div class="box"> 
    <h2> 
     <a href="#" id="remove">{$text[0]}</a> 
    </h2> 
    <div class="block"> 

    <div style="float:left; width: 35%; margin:5px; padding: 1em; background: white;"> 
     <p>Username: <a id="username"> {$_SESSION['username']}</a></p> 
     <div style="float:left; width: 30%; margin:5px;"> 
      <p> 
       Level:<br /> 
       Weapon:<br /> 
       Power:<br /> 
       Bullets:<br /> 
      </p> 
     </div> 
     <div style="float:right; width: 60%; margin:5px;"> 
      <p> 
      <b id="level">empty</b><br/> 
    <!--etc --> 
    <!--etc --> 
HTML; 

// Now just echo it back to the AJAX caller as HTML 
echo $html; 
exit(); 
1

請勿使用HEREDOC。它很混亂,只能在需要將長字符串存儲在變量中時才使用。 嘗試寫出您希望返回的HTML頁面,就像它是一個普通的HTML頁面一樣。在需要PHP輸出(變量,數組值等)的地方,開始一個PHP標記,回顯該值,然後結束PHP標記。這比試圖使用heredoc容易得多。

<div class="box"> 
<h2><a href="#" id="remove"><?php echo $text[0]; ?></a> </h2> 
<div class="block"> 
<div style="float:left; width: 35%; margin:5px; padding: 1em; background: white;"> 
    <p>Username: <a id="username"><?php echo $_SESSION['username']; ?></a></p>    
    <div style="float:left; width: 30%; margin:5px;"> 
     <p>Level:<br />Weapon:<br />Power:<br />Bullets:<br /></p> 
    </div> 
    <div style="float:right; width: 60%; margin:5px;"> 
     <p><strong id="level">empty</b><br />Weapon blabla<br />2 - 5<br />3/6<br /></p> 
    </div> 
</div> 

如果您擔心換行符(您不應該),您可以添加一個輸出處理程序來刪除它們。

ob_start("clean_linebreaks"); 
function clean_linebreaks($input) { 
    return str_replace("\n", "", str_replace("\r", "", $input)); 
} 

此外,我可以建議使用表而不是浮動的div。如果您使用表格,等級,武器和力量將更容易與其值相符。