为什么IE不能识别AJAX调用中返回的javascript代码?

时间:2010-12-02 00:27:40

标签: javascript internet-explorer

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

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

作为一个简单的例子,如果我的ajax调用返回这段代码并插入到div中,我会在FF中收到警报,但不会在IE中收到警告:

< script language ='JavaScript'type ='text / JavaScript'> 警报( '富!'); < /脚本>

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

问题可能是您的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);

这是Google Analytics直到最近所做的事情,所以如果它不适合您,我会感到惊讶。您不应该使用eval()。

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