2011-07-30 36 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。如果您使用表格,等级,武器和力量将更容易与其值相符。