我有一个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>";
}
答案 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)
// HTML string
var s = 'responseHTML';
var div = document.createElement('div');
div.innerHTML = s;
var elements = div.childNodes;
稍后我将发送数据并在DOM中构建它作为最终解决方案,以减少发送html结构的开销。