building html/php vs DOM/javascript


building html/php vs DOM/javascript

我有一个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>";
  }

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时可能出现的许多安全问题。

eval不能作为临时修复…作为一个更复杂的临时修复…我将使用下面的代码片段

将html加载到dom中
// HTML string 
var s = 'responseHTML'; 
var div = document.createElement('div'); 
div.innerHTML = s; 
var elements = div.childNodes;

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