html被ajax/javascript进程所改造


html being reformed by ajax / javascript process

我在javascript函数中对php文件进行了一个简单的ajax调用,该调用搜索数据库并返回格式化的html。一切都很好,但由于某种原因,返回的html格式错误。

Javascript:

$.ajax(
{ 
  url: "getItems.php?lastID=10",
  success: function(html)
  {
   if(html)
   {
    $("#main").prepend(html);      
   }
  }
 });

getItems.php

<?php
mysql_connect();
$lastID = $_GET['lastID'];  
$result = mysql_query("SELECT ...");
while ($row = mysql_fetch_assoc($result)) 
{
    echo '<span class="iteminfo"> ';    
    echo '<a class="username" href="http://x.com/'.$row['UserName'].'" target="_blank"/>'.$row['UserName'].'</a><br/>';
    echo '<a class="status" href="http://x.com/'.$row['UserName'].'/c/'" target="_blank" />'.$created_at.'</a></span>';
} 
?>

应该返回(并且在Firebug中正确返回)

<span class="iteminfo"> 
<a class="username" href="http://x.com/username" target="_blank"/>username</a><br/>
<a class="status" href="http://x.com/username/c/" target="_blank" />the date</a>
</span>

而是它的输出:

<span class="iteminfo"> 
<a class="username" href="http://x.com/username" target="_blank"/></a>username<br/>
<a class="status" href="http://x.com/username/c/" target="_blank" /></a>the date
</span>

我不知道为什么。

while ($row = mysql_fetch_assoc($result)) 
{
    echo '<span class="iteminfo"> ';    
    echo '<a class="username" href="http://x.com/'.$row['UserName'].'" target="_blank">'.$row['UserName'].'</a><br/>';
    echo '<a class="status" href="http://x.com/'.$row['UserName'].'/c/'" target="_blank" >'.$created_at.'</a></span>';
} 

你以错误的方式关闭了一个标签

<a> content </a>

但是你用过

<a/></a>

这是一个相当简单的问题——关闭锚标记,然后再次尝试关闭它们。我认为HTML规范为浏览器提供了在此处创建附加标记的选项。

以下是您要更改的代码:

echo '<a class="username" href="http://x.com/'.$row['UserName'].'" target="_blank">'.$row['UserName'].'</a><br/>';
echo '<a class="status" href="http://x.com/'.$row['UserName'].'/c/'" target="_blank" >'.$created_at.'</a></span>';

}

唯一的区别是<a>标记以'>'而不是'/>'终止,这意味着您同时关闭它。