【问题标题】:jQuery ajax call not working in IEjQuery ajax 调用在 IE 中不起作用
【发布时间】:2013-02-15 23:30:35
【问题描述】:

我正在尝试使用 jquery 的 ajax 函数从远程服务器获取一些 json。

var self = $(this);
$.ajax({
    cache: false,
    url: *external url*,
    data: {param: self.val()},
    type: 'GET',
    dataType: 'application/json',
    crossDomain: true,
    success: function(data, status) {
        console.log(status);
        console.log(data);
    }
});

这在 Chrome 中运行良好,数据得到输出。在 Firefox 中,请求已发送,但没有数据写入控制台。在 IE 中,调用似乎根本没有发送。

我做错了什么?我知道跨域阻止,但让我失望的是这在 chrome 中有效,但在任何其他浏览器中无效。

提前致谢!

【问题讨论】:

  • 你怎么知道它在 Chrome 中工作?尝试添加 error 处理程序。
  • 取出跨域,这样行吗?
  • 在chrome中,成功函数被正确调用,内容输出到控制台,所以我认为它有效:)
  • @Mikau:是的,这是一个很好的迹象。 :-)
  • @CR41G14:如果我删除它,它在 Chrome 中也不起作用

标签: jquery cross-domain


【解决方案1】:

我知道跨域阻止,但让我失望的是这在 chrome 中有效,但在任何其他浏览器中无效。

听起来您请求数据的服务器支持CORS,但请记住,不同的浏览器可能会随请求发送不同的标头,如果浏览器发送服务器不发送的标头,CORS 请求将失败不说没关系。因此,完全有可能 Chrome 只发送服务器已批准的标头,因此请求有效,但 Firefox 发送的标头服务器未批准,因此请求不起作用。

除非您使用的是 IE10,否则 IE 可能不起作用,因为跨域请求在 IE 中不起作用,除非您使用 XDomainRequest 对象而不是 XMLHttpRequest 对象,而 jQuery 不会这样做.有一些补丁可以做到这一点,但 jQuery 库本身没有。 IE10终于通过标准的 XMLHttpRequest 对象启用了 CORS。

【讨论】:

  • 我在 IE9 上,所以可能是这样,在这种情况下,也不会发送请求,对吗?有没有办法在不修补 jQuery 的情况下解决这个问题?
  • @Mikau:我不知道 IE9 在使用 XMLHttpRequest 时会在什么时候强制执行 SOP,但完全不发送它来强制执行它是合理的,是的。唯一的解决方法是自己直接使用XDomainRequest,修补jQuery(快速搜索应该会找到一些东西),或者完全不使用ajax(也许尝试JSONP,如果服务器支持的话——如果它支持 CORS,并为您提供 JSON,我希望它也有 JSONP 选项)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
相关资源
最近更新 更多