Gar*_*ett 123 jquery jsonp cross-domain cors internet-explorer-9
以下适用于IE以外的所有浏览器(我在IE 9中测试).
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'
}
);
Run Code Online (Sandbox Code Playgroud)
我有另一个使用的函数dataType: 'jsonp'
,但我不需要在这个AJAX调用上返回任何数据.我的最后一招将是返回JSONP中包含的一些乱码,以使其正常工作.
任何想法为什么IE搞砸了没有返回数据的CORS请求?
den*_*isg 149
这是jQuery的一个已知错误.jQuery团队"没有计划在核心中支持这个,并且更适合作为插件." (见评论).IE浏览器无法使用XMLHttpRequest的,但命名的替代对象XDomainRequest.
还有就是可以支持这jQuery的一个插件,它可以在这里找到: https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js
编辑
该功能$.ajaxTransport
注册运输工厂.甲转运用于内部由$.ajax
执行请求.因此,我认为你应该$.ajax
像往常一样打电话.有关运输商和延伸的信息$.ajax
可以在这里找到.
此外,可以在此处找到此插件的更好版本.
另外两个说明:
编辑2:http到https问题
请求必须以与托管页面相同的方案为目标
此限制意味着如果您的AJAX页面位于 http://example.com,那么您的目标URL也必须以HTTP开头.同样,如果您的AJAX页面位于https://example.com,那么您的目标网址也必须以HTTPS开头.
资料来源:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
Jac*_*sey 62
建立@dennisg接受的答案,我使用MoonScript的jQuery.XDomainRequest.js 成功完成了这个.
以下代码在Chrome,Firefox和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]);
}
}
});
};
Run Code Online (Sandbox Code Playgroud)
Moo*_*ipt 16
有关如何使用"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