jQuery POST 不在 IE10 上发送 Content-Type

Posted

技术标签:

【中文标题】jQuery POST 不在 IE10 上发送 Content-Type【英文标题】:jQuery POST not sending Content-Type on IE10 【发布时间】:2013-10-10 02:10:44 【问题描述】:

我在 Windows 7 64 位上使用 jQuery 1.9.1 和 Internet Explorer 版本 10.0.9200.16686,更新版本 10.0.9 (KB2870699)。

使用 $.ajax 进行 POST 时,不会发送 Content-Type 标头。它在 Chrome 和其他浏览器中运行良好,而且我相信以前在 IE10 上运行良好,所以我怀疑 IE10 的某些更新导致了问题。

我也可以手动创建一个 XMLHttpRequest 并发送一个请求,所以我假设它一定是 jQuery 中的一个错误,这才是真正的问题?我尝试升级到 1.10.2,但遇到了同样的问题。

我使用 $.ajaxSetup 设置了 contentType:

$.ajaxSetup(
    contentType: 'application/json; charset=utf-8',
    context: document.body,
    dataType: 'json',
    accepts: 'application/json',
    processdata: true,
    cache: false,
    crossDomain: true,
    xhrFields:  withCredentials: true 
);

我还尝试将其明确设置为 $.ajax 选项的一部分。

var options = 
    url: basePath + 'login',
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json',
    data: JSON.stringify(
        UserName: username,
        Password: password,
        RememberMe: rememberMe || false
    )
;
return $.ajax(options).then(...);

任何如何解决它的想法将不胜感激。

注意:我们最初使用 CORS,因此使用了 xhrFieldscrossDomain 设置,但由于 IE8 和 IE9 以及 XDomainRequest 的问题,目前将所有内容托管在同一域中。

【问题讨论】:

我已经用完全相同的设置(OS/Browser/jQuery)对其进行了测试,它对我来说很好用。您能否提供一个独立的工作示例来重现该问题? @ndm 发现问题,是由另一个脚本引起的 :( 【参考方案1】:

看来我们仍然包含 xdr.js 脚本以在 IE 上启用 CORS,这导致了此问题。

【讨论】:

以上是关于jQuery POST 不在 IE10 上发送 Content-Type的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Ajax cors IE10 不工作

IE10 是不是发送非法 POST 请求?

IE9下JQuery发送ajax请求失效

跨域的 jQuery AJAX 对于 Chrome 等工作正常,但不能在 IE10 中发送数据,也不能在 IE <= 9 中发送请求

jQuery .animate() 不在 IE 中为 backgroundPosition 设置动画

如何在 $.post() 上发送 JSON 数据 | jQuery [重复]