我有一个(希望)简单的问题。
我正在使用ajax更新当前页面上的DIV。插入到div中的是一个定义变量的脚本块。在FF中,我可以访问变量,但IE没有看到var。我是否需要以某种方式评估返回的代码以便IE识别变量?
作为一个简单的例子,如果我的ajax调用返回这段代码并插入到div中,我会在FF中收到警报,但不会在IE中收到警告:
< script language ='JavaScript'type ='text / JavaScript'> 警报( '富!'); < /脚本>
答案 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几乎可以保证加载,这就是为什么它不应该有同样的问题。