javascript - IE9 JQuery.ajax 抛出神秘错误

标签 javascript jquery ajax cross-domain internet-explorer-9

我在 IE9 中遇到了一个棘手的 ajax 错误。我会预先说明这在技术上不是跨域请求,所以我确定这不是问题所在。

编辑:问题似乎与同域请求被视为跨域有关,但原因尚不清楚(请参阅评论)。

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

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

我的请求有点像这样:

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

proxy.beforeRequestSend 函数如下所示:

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)。

非常感谢任何输入。

最佳答案

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

JQuery.support.cors=true;

关于javascript - IE9 JQuery.ajax 抛出神秘错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582409/

相关文章:

jquery - 我们如何从 web.config 中使用 jquery 读取或获取 session 超时,以便我们可以在 mvc 中处理 session 过期

php - json_encode 和 mysql unicode 问题

javascript - 通过Ajax进行文件下载操作

javascript - 数据表行数不适用于搜索结果

jquery - 过滤的下拉菜单

javascript - HTML select - 在 HTML 中显示值属性但保留选项文本

php - AJAX/Javascript 上传 PHP 问题

javascript - 奇怪的 ES6 Array.every 行为

javascript - 如何迭代多个数组 - Jquery

javascript - 从外部点击事件调用 jQuery 插件内的函数