首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IE9 JQuery.ajax抛出神秘错误

IE9 JQuery.ajax抛出神秘错误
EN

Stack Overflow用户
提问于 2011-12-20 21:47:58
回答 3查看 2.8K关注 0票数 1

我在IE9中遇到了一个困难的ajax错误。我会预先说,这在技术上不是一个跨域请求,所以我相信这不是问题。

编辑:看起来这个问题可能与同一个域请求被视为跨域处理有关,尽管原因尚不清楚(参见注释)。

我正在使用本地代理进行跨域ajax请求,我使用的url看起来像http://localhost/proxy/?target=..... --所有优秀的浏览器都对此很满意,但是IE在请求发送之前立即返回一个错误(我已经使用Fiddler和IE的开发工具网络捕获验证了这一点)。

当我检查传递给JQuery的ajax.error回调的错误对象时,它的isRejected()函数返回true,但是我找不到什么会导致请求被拒绝。错误对象的readyState为4(表示请求已完成?),状态为0,statusText为“错误”。

我的请求有点像这样:

代码语言:javascript
复制
$.ajax(url, {
    data: {...list of parameters...},
    dataType: 'json',
    type: 'GET',
    success: function() { ... },
    error: function() { ... },
    beforeSend: proxy.beforeRequestSend,
    timeout: 35000
});

proxy.beforeRequestSend函数如下所示:

代码语言:javascript
复制
this.beforeRequestSend = function(XHR, settings) {

  if(that.proxyRequired(settings.url)) {
    // I've also tried using the full url (http://localhost/proxy/?...)
    settings.url = 'proxy/?target=' + encodeURIComponent(settings.url); 
  }
};

有人知道什么会导致IE9中的请求彻底失败吗?不幸的是,我无法访问IE8或7进行测试,但我认为它们的行为是一样的。JQuery的ajax错误处理程序被调用的事实表明,该错误不是在我构建请求时发生的,而是在假定它被执行时发生的。所有正常工作的其他浏览器都告诉我,基本原理是正确的。

我以前读过,JQuery / IE组合存在一些字符的URL编码问题,但是如果我在beforeSend函数的末尾警告settings.url,目标URL是正确编码的(这也告诉我that.proxyRequired(settings.url)返回true)。

任何投入都非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-31 03:07:21

正如您在我的问题的代码中所看到的,我在JQuery.ajax函数的beforeSend回调(proxy.beforeRequestSend)中将代理url放在前面。在执行此函数时,JQuery已经检查了请求并确定它是跨域的。

因此,JQuery将我的所有请求作为跨域处理,即使它们都是本地代理。JQuery拒绝了IE和Opera中的任何跨域请求,因为它们不支持CORS。

幸运的是,crossDomain属性被传递给settings对象中的beforeSend回调,并且很容易更改。

代码语言:javascript
复制
this.beforeRequestSend = function(XHR, settings) {

  if(that.proxyRequired(settings.url)) {
    settings.url = 'proxy/?target=' + encodeURIComponent(settings.url);
    settings.crossDomain = false;
  }
};
票数 1
EN

Stack Overflow用户

发布于 2012-02-15 05:08:45

在您的javascript中,在调用$.ajax (或等效的)强制跨域行为之前:

代码语言:javascript
复制
JQuery.support.cors=true;
票数 3
EN

Stack Overflow用户

发布于 2011-12-21 00:08:31

您的代理操作是否在响应ajax调用时发送重定向?浏览器默默地遵循重定向,这可能是XHR检测XSS尝试的原因。由于jQuery不支持IE9上的CORS,所以会出现错误。

参见另一个堆栈溢出问题:Cross-origin Ajax requests don't work in Opera and IE9?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8582409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档