构建html / php vs DOM / javascript

时间:2011-09-04 23:12:33

标签: php javascript ajax

我有一个ajax电话。使用下面的while循环返回responseText。除了没有加载嵌入式JavaScript之外,一切正常。我的解决方案是使用javascript在客户端尽可能多地构建html。我可以在客户端上构建这个xhtml的最简单方法是什么。最简单的方法是createElement('div')并单独添加所有这些元素。这就是我目前正在做的事情。但由于下面的代码失败了,我想知道这是否是一个很好的解决方案。更重要的是有一个脚本在那里采取HTML并将其转换为javascript,这是我猜的理想。

while ($a = mysqli_fetch_assoc($query_return))
  {
  $date = date('M j \a\t g:i:s a', $a[time]);
  echo  "<div class=\"Bb2b\"><img class=\"a\" src=\"p/$a[email].jpg\" alt=\"\"/><a class=\"a\" href=\"javascript:void(0)\">$a[fname] posted <script type=\"text/javascript\">v0($a[time],$time)</script></a><br/><p class=\"c\">$a[message]</p></div>";
  }

2 个答案:

答案 0 :(得分:0)

这是正确的行为,javascript不会在动态更改.innerHTML中执行 - 您只需将其插入到页面DOM中。你需要使用eval()手动执行这样的片段。但是你说想在客户端构建xhtml - 这似乎是你正在做的事情的确切对话(你在PHP中生成了很多HTML)。

我建议您使用JSON传输数据 - 在PHP中,您可以使用json_encode()函数直接将变量转换为JSON字符串。那样你的代码就像

while ($a = mysqli_fetch_assoc($query_return))
 {
  $a[date] = date('M j \a\t g:i:s a', $a[time]);
  echo json_encode($a);
}

在客户端,您可以使用JQuery(或任何其他体面的AJAX库)将字符串直接解析为JS对象。这样做的好处是可以降低传输数据的数量,并消除使用eval时可能出现的许多安全问题。

答案 1 :(得分:0)

eval没有作为临时修复程序工作..更多涉及临时修复...我只是要使用此代码段将html加载到dom中

// HTML string 
var s = 'responseHTML'; 

var div = document.createElement('div'); 
div.innerHTML = s; 
var elements = div.childNodes;

稍后我将发送数据并在DOM中构建它作为最终解决方案,以减少发送html结构的开销。