IE9不执行Ajax请求

时间:2014-02-24 19:01:27

标签: jquery ajax internet-explorer-9

似乎是一个相当普遍的问题,但在搜索了一堆SO帖子之后我仍然没有接近,所以我们走了。

IE9拒绝执行我的ajax调用,它直接跳转到错误函数。没有从浏览器发送请求,并且控制台中没有给出错误,这使得调试问题变得更加困难。

我猜这个问题非常特定于IE9,因为它适用于Chrome,FF甚至IE8。 POST请求是跨域的,但幸运的是,如果有人认为有帮助,我可以修改我想要的任何标题。

请注意,我使用polyfill作为console.log(),尽管据我所知,它只会影响< IE8。

我尝试了什么

  • 添加缓存:false
  • 添加时间戳
  • 添加contentType
  • 将我的电脑扫成两半

代码

$.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();
    }

});

1 个答案:

答案 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或服务器端代理。