微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-$.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代码显示为“返回新的A.XMLHttpRequest”.

错误消息为“错误:对象不支持属性方法”.我已经验证ajaxurl变量具有正确的值,并且该URL返回正确的JSON.

难道因为所有这些都在iFrame中运行而发生了吗?

解决方法:

花了我几个小时来解决这个问题,所以希望我可以省去别人的头痛.

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

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

我试过了:

> jQuery.support.cors = true;
但这似乎无济于事.
>如果这是一个单例函数,则JSONP将起作用.但是我正在一个相对复杂的对象中工作,该对象在一个页面上需要多个实例,但是回调仅在全局名称空间中才真正起作用,并且我碰到了冲突……非常丑陋的冲突.
> $.getScript对我不起作用,因为我实际上需要处理返回的json数据.尽管’script’数据类型不会引发XDomain访问错误,但它也不会将实际数据返回给我的.success回调函数.
> $.getJSON对于IE8不起作用-它引发“访问被拒绝”错误.基本上会遇到CORS问题.在全球范围内似乎没有任何帮助.

因此,我发现有效的方法如下:

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

这有点像黑客,因为我指定了jsonp数据类型,即使返回的数据中没有包装函数.但是为了解决IE的XDomain问题,我们必须愚弄它,以为我们正在获取JSONP脚本.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐