似乎是一个相当普遍的问题,但在搜索了一堆SO帖子之后我仍然没有接近,所以我们走了。
IE9拒绝执行我的ajax调用,它直接跳转到错误函数。没有从浏览器发送请求,并且控制台中没有给出错误,这使得调试问题变得更加困难。
我猜这个问题非常特定于IE9,因为它适用于Chrome,FF甚至IE8。 POST请求是跨域的,但幸运的是,如果有人认为有帮助,我可以修改我想要的任何标题。
请注意,我使用polyfill作为console.log(),尽管据我所知,它只会影响< IE8。
我尝试了什么
代码
$.ajax({
type: 'POST',
url:
'http://mydomain.com/api/path/' + someVar +
'/additional/parameter/paths' +
'?ts=' + new Date().getTime(),
data: data,
cache: false,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function () {
$('#contact-form-success').foundation('reveal', 'open');
},
error: function (xhr, status) {
console.log('The request failed (XHR / Status)');
console.log(xhr);
console.log(status);
$('#contact-form-error').foundation('reveal', 'open');
},
complete: function () {
stopAnimateButton();
}
});
答案 0 :(得分:3)
IE8和9要求使用XDomainRequest
对象来使用CORS执行跨域请求。 IE7根本不支持CORS。
由于各种不一致,jQuery没有实现XDomainRequest
。
为了解决这个问题,您基本上需要重新编写跨域请求的处理方式,方法是不使用jQuery,或者向jQuery添加传输,拦截所有跨域请求并以使用的方式处理它们可用时XDomainRequest
,否则为xhr2。
此问题说明如何在不使用$.ajax
的情况下执行此操作:
Why does this cross-domain request work in other browsers but not IE9?
这是一个github回购,展示了如何添加传输。 https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
如果您需要IE7支持,则必须使用JSONP或服务器端代理。