jQuery Ajax POST 更改 Firefox 中的 Content-Type

Posted

技术标签:

【中文标题】jQuery Ajax POST 更改 Firefox 中的 Content-Type【英文标题】:jQuery Ajax POST changes Content-Type in Firefox 【发布时间】:2014-01-06 22:57:59 【问题描述】:

我正在进行 Ajax 调用以将字段、对象和数组的集合发布到 php。十分之九,这工作得很好。但是当多次提交相同的请求(数据没有变化)时,请求偶尔会发送 Content-Type: text/plain 或 text/html 而不是 application/x-www-form-urlencoded,导致问题我的PHP。 JSON 可能更可取,但谁能想到为什么会发生这种情况?

这不是跨域请求。 这只发生在 Firefox 中。 我认为我不需要指定 Content-Type,因为 Ajax 会默认。 我明确致电$.param(),但我认为我不需要。

我期望 JSON 作为回报。

$.ajax(url: action,
   type: "POST",
   dataType: "json",
   data: $.param($(domElement).data()),
   complete: function() 
      // Cleanup
   ,
   success: function(data) 
      // Handle success.
   ,
   error: function() 
      // Handle error
   
);

【问题讨论】:

【参考方案1】:

不知道为什么这只发生在 Firefox 中,但是如果您手动设置内容类型会有所帮助吗?

$.ajax(url: action,
   type: "POST",
   contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
   dataType: "json",
   data: $.param($(domElement).data()),

   complete: function() 
      // Cleanup
   ,
   success: function(data) 
      // Handle success.
   ,
   error: function() 
      // Handle error
   
);

【讨论】:

尝试一下。它似乎减少了出现的次数,但我仍然看到它们。我想知道它是否与 Ajax 如何或何时确定内容类型以及我的数据通过 jQuery 附加到 DOM 对象这一事实有关。 这似乎是对的:如果我在 dom 元素上使用 .val() 而不是 .data,我会得到内容类型的标题。

以上是关于jQuery Ajax POST 更改 Firefox 中的 Content-Type的主要内容,如果未能解决你的问题,请参考以下文章

ajax post - 我想更改 Accept-Encoding 标头值

WCF Ajax 调用不适用于 Jquery $.ajax

jQuery.ajaxSetup()

XMLHttpRequest、jQuery.ajax、jQuery.post、jQuery.get 有啥区别

Jquery:使用 laravel 的跨域 ajax 'POST'

jQuery Ajax实例 ($.ajax_$.post_$.get)