除了IE (我在IE9中测试)之外,下面的代码可以在所有的浏览器中运行。
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请求吗?
发布于 2012-04-20 00:14:43
这是一个带有jQuery的已知bug。jQuery团队“没有计划在核心中支持它,而是更适合作为一个插件”。(参见this comment)。IE不使用XMLHttpRequest,而是使用另一个名为XDomainRequest的对象。
在jQuery中有一个插件可以支持这一点,它是can be found here:https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js
EDIT该函数$.ajaxTransport
注册一个传输器工厂。$.ajax
在内部使用传输器来执行请求。因此,我假设您应该能够像往常一样调用$.ajax
。有关传输器和扩展$.ajax
的信息可以在here中找到。
此外,这个插件的一个可能更好的版本可以在here找到。
另外两个注意事项:
编辑2: http到https问题
请求的目标方案必须与宿主页面相同
这一限制意味着,如果AJAX页面位于http://example.com,那么目标URL也必须以HTTP开头。类似地,如果AJAX页面位于https://example.com,那么目标URL也必须以HTTPS开头。
发布于 2013-01-23 01:01:55
基于@dennisg的公认答案,我使用MoonScript的jQuery.XDomainRequest.js成功地实现了这一点。
以下代码在Chrome、火狐和IE10上运行正常,但在IE9上运行失败。我只需包含脚本,它现在就可以在IE9中自动工作了。(可能有8个,但我还没有测试过。)
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]);
}
}
});
};
发布于 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
https://stackoverflow.com/questions/10232017
复制相似问题