【问题标题】:jquery.ajax post request missing content-type in IE9, works in Chromejquery.ajax 发布请求在 IE9 中缺少内容类型,适用于 Chrome
【发布时间】:2013-06-29 22:44:11
【问题描述】:

我正在尝试执行以下 jQuery.ajax 请求,但遇到了一个奇怪的问题。

当我使用 IE9 发送此请求时,虽然我发送了 contentType 参数,但在 chrome 上该请求正常。

$.ajax({
        type: "POST",
        contentType: "application/x-www-form-urlencoded",        
        url: this.AgentServiceUrl + "/" + methodName,
        data: data,
        async: true,
        success: function (xml, textStatus) { if (successHandler != null) successHandler(xml, textStatus); },
        error: function (xmlHttpRequest, textStatus, errorThrown) { if (errorHandler != null) errorHandler(state, xmlHttpRequest, textStatus, errorThrown); }
    });

我正在使用 jQuery 2.0.2 和 jQuery.XDomainRequest.js 来处理跨域请求。

我能做什么??

【问题讨论】:

    标签: internet-explorer jquery post content-type


    【解决方案1】:

    $.ajax 使用 XDomainRequest 以允许 AJAX 应用程序发出安全的跨域请求

    在 Internet Explorer 8 中,引入了 XDomainRequest 对象。这 对象允许 AJAX 应用程序发出安全的跨域请求 直接通过确保 HTTP 响应只能由 如果数据源表明响应是公开的,则为当前页面

    但遗憾的是,请求的 Content-Type 标头仅支持 text/plain

    在 XDomainRequest 对象的原始化身中,我们允许 POST 请求的 Content-Type 规范。有人指出 这违反了我们的目标,即只发出 HTML 的请求 表单可以发出,因为 HTML 表单仅限于发送数据 三种不同的内容类型:文本/纯文本, application/x-www-urlencoded 和 multipart/form-data。特别是, 有人指出,一些 AJAX 服务器库会盲目地 假设如果他们收到带有 SOAP 或 JSON 的请求 Content-Type,则客户端必须是受信任的或同源的 (因为 HTML 本身以前无法提供跨域问题 具有该 Content-Type 的请求)。

    不幸的是,当我们在后来的 IE8 Beta 中修复了这个问题时,我们去了 有点太远了;我们将内容类型限制为 text/plain 但没有 允许调用者指定数据在 应用程序/x-www-urlencoded 形式。这是有问题的,因为 服务器端框架(例如 ASP、ASPNET 等)只会自动 如果 x-www-urlencoded 将请求的字段解析为名称-值对 内容类型已指定。

    要解决此问题,当前处理 HTML 的服务器代码 必须重写表单以手动将请求正文解析为 接收来自 XDomainRequest 对象的请求时的名称-值对。 这使得添加对 XDomainRequest 对象的支持更加困难 否则会是这样。

    Source

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 2021-07-30
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多