为什么在插入响应ajax调用时不执行嵌入式JavaScript?

时间:2011-09-04 03:45:26

标签: javascript ajax

在.innerHTML中插入JavaScript不会导致它运行。

我有一个用户提交帖子的迷你Feed。这将启动一个ajax调用,将用户数据保存到mysql表中。从那里PHP生成xhtml。从那里PHP生成的xhtml作为响应文本发送回javascript。这个xhtml包含用于显示“漂亮时间”的嵌入式javascript。

现在,如果PHP生成的xhtml / javascript以非ajax方式发送到客户端,则可行。但是当我将它作为responseText发送然后使用.innerHTML更新DOM时,它不起作用。无论在XHTML中使用javacript的机制是什么,似乎都不喜欢将嵌入式javascript写入封闭div标签的.innerHTML属性。

这有一个简单的解决方法吗?或者我是否必须在javascript中构建UI而不是将其全部插入到innerHTML中......在之前的帖子中有人提到过.innerHTML不是好习惯。也许这就是他们的意思。

2 个答案:

答案 0 :(得分:3)

你是对的,innerHTML不会这样做,如果你想动态创建一个脚本标签,你需要使用document.createElement来创建一个脚本标签,但是它有所有的与eval相关的同样精彩的安全奖金。

但这是另一个想法。在主页面中定义一些函数不是更好,在附加任何新内容之后,将日期设置为“漂亮”模式而不需要让AJAX响应知道它的任何内容吗?

答案 1 :(得分:1)

以下代码应该有效:

function onSuccess() {
    src = document.createElement('script');
    src.innerHTML = this.responseText;
    document.body.appendChild(src);
}

但是我同意cwallenpoole,为什么不能将所有javascript代码(对于相当漂亮的日期)已经在主页中进行了高级编写? (或包含的脚本或其他内容)。