首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有CORS的IE9 jQuery AJAX返回“访问被拒绝”

带有CORS的IE9 jQuery AJAX返回“访问被拒绝”
EN

Stack Overflow用户
提问于 2012-04-19 23:56:28
回答 12查看 144.8K关注 0票数 123

除了IE (我在IE9中测试)之外,下面的代码可以在所有的浏览器中运行。

代码语言:javascript
复制
jQuery.support.cors = true;
...
        $.ajax(
            url + "messages/postMessageReadByPersonEmail",
            {
                crossDomain: true,
                data: {
                    messageId       : messageId,
                    personEmail     : personEmail
                },
                success: function() {
                    alert('marked as read');
                },
                error: function(a,b,c) {
                    alert('failed');
                },
                type: 'post'
            }
        );

我有另一个使用dataType: 'jsonp'的函数,但是我不需要在这个AJAX调用中返回任何数据。我最后的办法就是返回一些包装在JSONP中的乱七八糟的东西,以使其正常工作。

你知道为什么IE搞砸了一个不返回数据的CORS请求吗?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2012-04-20 00:14:43

这是一个带有jQuery的已知bug。jQuery团队“没有计划在核心中支持它,而是更适合作为一个插件”。(参见this comment)。IE不使用XMLHttpRequest,而是使用另一个名为XDomainRequest的对象。

在jQuery中有一个插件可以支持这一点,它是can be found herehttps://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js

EDIT该函数$.ajaxTransport注册一个传输器工厂。$.ajax在内部使用传输器来执行请求。因此,我假设您应该能够像往常一样调用$.ajax。有关传输器和扩展$.ajax的信息可以在here中找到。

此外,这个插件的一个可能更好的版本可以在here找到。

另外两个注意事项:

  • object XDomainRequest为introduced from IE8,在以下版本中将不起作用。来自IE10 CORS的
  1. 将是supported using a normal XMLHttpRequest.

编辑2: http到https问题

请求的目标方案必须与宿主页面相同

这一限制意味着,如果AJAX页面位于http://example.com,那么目标URL也必须以HTTP开头。类似地,如果AJAX页面位于https://example.com,那么目标URL也必须以HTTPS开头。

来源:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

票数 150
EN

Stack Overflow用户

发布于 2013-01-23 01:01:55

基于@dennisg的公认答案,我使用MoonScript的jQuery.XDomainRequest.js成功地实现了这一点。

以下代码在Chrome、火狐和IE10上运行正常,但在IE9上运行失败。我只需包含脚本,它现在就可以在IE9中自动工作了。(可能有8个,但我还没有测试过。)

代码语言:javascript
复制
var displayTweets = function () {
    $.ajax({
        cache: false,
        type: 'GET',
        crossDomain: true,
        url: Site.config().apiRoot + '/Api/GetTwitterFeed',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (data) {
            for (var tweet in data) {
                displayTweet(data[tweet]);
            }
        }
    });
};
票数 62
EN

Stack Overflow用户

发布于 2013-06-18 02:01:42

有关如何使用"jQuery-ajaxTransport-XDomainRequest“插件执行此操作的完整说明可在此处找到:https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest#instructions

这个插件得到了积极的支持,可以处理HTML、JSON和XML。该文件也托管在CDNJS上,因此无需额外设置即可直接将脚本放入页面:http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.1/jquery.xdomainrequest.min.js

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10232017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档