$ .getJSON(jQuery)不能在IE 8中工作

问题描述:

有一些直接的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内运行?

+1

您使用的是jQuery 1.4.2吗? – tcooc 2010-07-01 00:16:02

+0

尝试使用相对网址而不是基本网址...我在过去遇到过一些麻烦。 – Mottie 2010-07-01 01:18:29

+0

相对URL无效:( 当我使用IE的脚本调试器进行调试时,它显示红色的ajaxurl变量,变量的值是正确的,数据类型是字符串,但值显示为红色。那有帮助吗? – tinkerr 2010-07-01 01:52:57

我从jQuery 1.4.2切换到1.3.2,此问题消失。

+0

请确保您将此标记为正确/被接受的答案:) – 2010-07-01 04:48:11

+0

我在dev.jquery.com上创建了一个错误报告。不过,我不想跳枪。如果他们调查并回到其他原因导致错误,我会在这里发布正确答案。 – tinkerr 2010-07-01 05:22:01

花了我几个小时才弄明白,所以希望我能救别人头疼。

如别处所述,IE不使用XMLHttpRequest。

但是,其他地方发布的许多解决方案都不适用于我。

我想:

  1. jQuery.support.cors = true; 但是,这似乎并没有做任何事情。

  2. 如果这是一个单例函数,JSONP将起作用。但是我正在一个相对复杂的对象中工作,这个对象需要在一个页面上有多个实例,但回调只能在全局名称空间中工作,并且碰到碰撞......非常难看的碰撞。

  3. $ .getScript不适用于我,因为我需要真正按摩返回的json数据。虽然'script'dataType不会引发XDomain访问错误,但它也不会将实际数据返回到我的.success回调函数。

  4. $ .getJSON不适用于IE8 - 它会引发“访问被拒绝”错误。基本上遇到CORS问题。而全球层面上的任何事情似乎都没有帮助。

所以,我发现了什么作品如下:

$.ajax({ 
    url : remote_cross_domain_non_local_url, 
    dataType : 'jsonp' 
}) 
.success(function(data){ dosomethingwithdata(data); }); 

这是一种黑客攻击的,因为我指定即使是在回来的数据没有包装功能的JSONP数据类型。但为了解决IE浏览器的XDomain问题,我们必须欺骗它,认为我们正在获取JSONP脚本。