我有一个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结构的开销。