【问题标题】:Why won't IE recognize javascript code returned in AJAX call?为什么 IE 不能识别 AJAX 调用中返回的 javascript 代码?
【发布时间】:2010-12-02 00:27:39
【问题描述】:

我有一个(希望如此)简单的问题。

我正在使用 ajax 更新当前页面上的 DIV。在插入到 div 中的是一个定义变量的脚本块。在 FF 中,我可以访问该变量,但 IE 看​​不到该变量。我是否需要以某种方式评估返回的代码,以便 IE 识别变量?

举个简单的例子,如果我的 ajax 调用返回这个 sn-p 代码并插入到 div 中,我会在 FF 中收到警报,但在 IE 中没有:

alert('Foo!'); 脚本>

【问题讨论】:

  • 可能值得指定您正在谈论的 IE 版本。 IE6、7 和 8 都是完全不同的野兽。 (当涉及到 IE 时,没有什么是简单的问题。)
  • 嗨,对不起,这个问题有点含糊。我使用的是 IE8,虽然我在 IE7 中也遇到过这个问题。

标签: javascript internet-explorer


【解决方案1】:

是的,常见的解决方法是使用getElementsByTagName() 获取所有script 元素,然后使用eval() 它们。

【讨论】:

  • 哦,我多么讨厌 IE……你能给我举个例子吗?我试过了,但仍然没有收到警报: var code = cp.document.getElementById('cpanelBody').getElementsByTagName('script'); for (i = 0; i
  • 我可以使用 jQuery 吗? $('#somediv').load('ajax.php', null, function() { eval($('#somediv script').text()); } ); 请注意,代码是在该内部函数的上下文中执行的。
  • 嗯,我会看一下,我目前正在使用 YUI(长篇故事),但可以混合一些 jQuery 只是为了好玩。不过,这似乎非常令人费解。我要做的只是引入一组数据,然后进一步处理——也许我只是返回一个带有隐藏变量的表单来完成我想要的,而不是直接传递一个 JS 对象。
【解决方案2】:

您应该返回一个 JSON 对象作为 AJAX 调用的结果,然后使用 json2.js Javascript 东西将其评估为一个活动对象。

http://json.org/ 有一个指向人类已知语言的 JSON 库的链接,包括 Javascript。

【讨论】:

  • 嗯,我实际上已经返回 JSON,格式为 {'status':'some status','content':'The content getting stuffed into my page'}。如果 status = 'OK',那么我把它放在目标 div 中,如果它是 'Error',我将返回的错误信息填充到错误 div 中。
【解决方案3】:

问题可能出在您的 JavaScript MIME 类型 - 您使用的是非常规类型 (type='text/JavaScript'):

<script language='JavaScript' type='text/JavaScript'> alert('Foo!'); </script>

你应该试试这个:

<script type='text/javascript'> alert('Foo!'); </script>

我最近进行了一些测试,发现即使是现代浏览器也对这种 MIME 类型非常挑剔(跳到附加测试#1),如果设置不正确,将拒绝执行 JavaScript:http://davidbcalhoun.com/2010/what-happens-when-we-serve-javascript-with-random-mime-types

如果这不是问题,请尝试将脚本添加到文档 Head:

document.getElementsByTagName('head')[0].appendChild(script);

这是谷歌分析直到最近才做的,所以如果它不适合你,我会感到惊讶。您不需要使用 eval()。

根据此页面this page,IE 对尚未加载的节点很挑剔,但几乎可以保证 Head 已加载,这就是为什么它不应该有同样的问题。

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多