$ .getJSON(jQuery)在IE 8中不起作用

时间:2010-06-30 23:58:47

标签: javascript jquery ajax internet-explorer

有一些简单的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中运行吗?

2 个答案:

答案 0 :(得分:4)

花了我几个小时来弄清楚这一点,所以希望我可以挽救别人的头痛。

如其他地方所述,IE不使用XMLHttpRequest。

然而,其他地方发布的许多解决方案对我不起作用。

我试过了:

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

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

  3. $。getScript对我不起作用,因为我需要实际按摩返回的json数据。虽然'script'dataType不会抛出XDomain访问错误,但它也不会将实际数据返回给我的.success回调函数。

  4. $。getJSON不适用于IE8 - 它会抛出“拒绝访问”错误。基本上遇到了CORS问题。全球范围内的任何事情似乎都没有帮助。

  5. 所以我发现的作品如下:

    $.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,这个问题消失了。