在ajax响应中执行javascript

时间:2014-07-03 05:31:29

标签: javascript jquery html ajax

我使用ajax(使用jQuery)来更新网页的各个部分。 查询返回html以插入各个位置。

然而,这些html块有时包含写东西的javascript 他们在哪里。我的意思是,在AJAX返回的html的某个div中,包含了一个脚本,这个脚本执行了一些document.write()指令(通常来自我们广告发布者的脚本,我们没有任何控制权)结束)。

现在,如果我只使用我的AJAX查询返回的html并用它更新DOM,那么javascript就不会被执行。
什么是最清洁/最简单的方法来确保document.write()将其内容写入适当的位置?

2 个答案:

答案 0 :(得分:2)

您无法将document.write()与动态插入的内容结合使用。问题是当前文档已经在初始页面加载时打开,解析和关闭。如果您现在从其中一个脚本调用document.write(),它将清除当前文档并开始编写新文档。这将使您的浏览器窗口空白并只写出新内容(当然不是您想要的内容)。

我能想到的选择是:

  1. 将内容放入iframe并通过.src属性加载,而不是通过ajax加载,以便内容可以加载到新文档中,document.write()可以执行正常的预期操作。

  2. 将这些脚本更改为不使用document.write()。如果您控制该代码,则需要更改脚本以将内容插入到特定DOM元素中,而不是尝试写入文档流,因为在解析原始文档后文档流将无法按照您希望的方式工作文件已经结束。

  3. 哈哈document.write()(暂时用其他方法替换它),以便在加载动态内容时以不同的方式捕获document.write()内容,然后动态插入一些现有的DOM元素,而不是使用实际的document.write()。这确实是一个黑客攻击,无法保证这适用于所有浏览器。

答案 1 :(得分:1)

正如您无疑发现的那样,document.write完全摧毁了当前的文件。

有几种方法可以处理它,我发现最简单的方法是将document.write替换为使用常规DOM操作的函数。

document.write = function(str) {
  var oldtxt =   $("#destdiv").html();
  oldtxt += str;
  $("#destdiv").html(oldtxt);
}