有一些简单的AJAX代码可以在Firefox和Chrome中使用,但在IE中则不行。我没有做任何花哨的事情,但代码太长了,无法在此发布。
基本上,它是:
<script type="text/javascript">
var baseurl = 'http://mydomain.com/facebook/';
var setUpGame = function(lvl){
var ajaxurl;
ajaxurl = baseurl+'ajax.php?f=gg&l='+lvl;
$.getJSON(ajaxurl,function(data){
//do stuff with data here
});
};
$(document).ready(function(){
setUpGame(3);
});
</script>
问题是IE在$ .getJSON方面存在问题。调用堆栈显示它在jQuery(第123行,第183列)的内容中失败,其中jQuery代码读取“return new A.XMLHttpRequest”
错误消息是“错误:对象不支持此属性或方法”。我已经验证了ajaxurl变量具有正确的值,并且该URL返回正确的JSON。
这可能会发生,因为所有这些都在iFrame中运行吗?
答案 0 :(得分:4)
花了我几个小时来弄清楚这一点,所以希望我可以挽救别人的头痛。
如其他地方所述,IE不使用XMLHttpRequest。
然而,其他地方发布的许多解决方案对我不起作用。
我试过了:
jQuery.support.cors = true;
但这似乎没有做任何事情。
如果这是一个单例函数,JSONP会起作用。但是我在一个相对复杂的Object中工作,在一个页面上需要多个实例,但回调只能在全局名称空间中工作,我最终会遇到碰撞......非常难看的碰撞。
$。getScript对我不起作用,因为我需要实际按摩返回的json数据。虽然'script'dataType不会抛出XDomain访问错误,但它也不会将实际数据返回给我的.success回调函数。
$。getJSON不适用于IE8 - 它会抛出“拒绝访问”错误。基本上遇到了CORS问题。全球范围内的任何事情似乎都没有帮助。
所以我发现的作品如下:
$.ajax({
url : remote_cross_domain_non_local_url,
dataType : 'jsonp'
})
.success( function(data){ dosomethingwithdata(data); } );
这是一种黑客攻击,因为即使在返回的数据中没有包装函数,我也指定了一个jsonp数据类型。但是为了解决IE的XDomain问题,我们不得不欺骗它以为我们正在获取JSONP脚本。
答案 1 :(得分:1)
我从jQuery 1.4.2切换到1.3.2,这个问题消失了。