Jquery的$.get或$.ajax在Internet Explorer中无法工作

8

我一直在IE 9中运行这段代码,但运行不成功。我查看了所有有关UTF-8修复的帖子,但仍然没有解决。有什么想法吗?

$.get({
    url: 'http://api.flickr.com/services/rest/?api_key={apikey}&method=flickr.collections.getTree&user_id=66970820%40N03&collection_id=66947766-72157631850748939',
    success: function () {
        console.log('success!');
    }
}).done(function () {
    console.log('done');
}).fail(function () {
    console.log('fail')
});

在Safari、Firefox和Chrome中,它可以正常工作。将URL粘贴到IE中时,响应也很好。


2
它到底是怎么不工作的? - Aleksandr M
不了解完整情况,我想你可能遇到了跨域问题。尝试查看$.getJSON。特别是关于JSONP的部分。 - Erik
URL 是一个 XML 文档,无法跨域检索... 您需要在 $.get 中添加 jsonp 数据类型,并在 URL 中设置 jsonp 参数,以便 API 返回 jsonp 而不是 xml。 - charlietfl
IE8-9不支持标准ajax方法的CORS,这很可能是问题所在。 - Fabrício Matté
3个回答

4
@Iden Gozlan,您的回答听起来很好,但是我的头脑太弱了,有些困惑。
@Erik 和 @charlietfl 的JSONP建议让我找到了正确的解决方案。这绝对是一个跨域脚本问题。不明白为什么只有IE不能允许。我按照以下方式编辑了我的代码,一切都很好!
$.ajax({
  url: 'http://api.flickr.com/services/rest/?api_key={apikey}&method=flickr.collections.getTree&user_id=66970820%40N03&collection_id=66947766-72157631850748939&jsoncallback=doSomeGreatStuff',
  dataType: "jsonp"
});

function doSomeGreatStuff(response) {
  // do some great stuff with the json response
  console.log( response.collections.collection[0].id );
}

帮助我学习的资源分别是这里这里,甚至还有这里


3

这个jQuery XDomainRequest插件非常好用。
我在IE8和9中遇到了ajax问题,但只需包含此插件而无需更改任何代码,即可使我的网站具备IE8和9的CORS ajax功能 :)


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接