前言
用Ajax方式提交表单,决定编码类型的是请求头中Content-Type,不同的值对应不同的提交和回调处理方式。
考虑的Content-Type类型,共有如下几种:
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
- application/json
- text/xml
application/x-www-form-urlencoded
这种Content-Type要求数据按照key1=value1&key2=value2的格式发送给后端,且其中的特殊字符需要转义成%HH的形式。所以,传数据之前需要用encodeURIComponent()函数编码表单数据,切记。
multipart/form-data
这种Content-Type类型多用来提交文件,我们采用HTML5的FormData对象来构建提交的数据。FormData对象的浏览器支持情况:
基本上现代浏览器都支持,IE11以下不支持,不支持的建议用ajaxForm之类的jquery的文件提
注意,这种类型的发送方式,不能设置请求头部的Content-Type,应交给浏览器来处理。
text/plain
如果请求头部没有设定Content-Type,且数据既不是FormData也不是XML Document(将在xml小节中介绍),则Content-Type默认为text/plain,直接发送字符串即可:
application/json
JSON格式的数据,后端和各种移动端都很方便处理,用这种MIME类型时,需要将数据对象转换成JSON串。首先,转换数据成JSON串;然后,设定请求头部的Content-Type,就可以发数据了。
text/xml
目前没有遇到过要用XML的情况,大部分都可用JSON代替。
还有话说
- multipart/form-data与text/xml不需要设置请求头的Content-Type;
- 关于method,以上都是POST方式,若是GET方式是没有请求数据体的,数据直接加在URL后面;
- 接收请求时的解析方式
- text/xml:用responseXML
- application/json:需要先JSON化,JSON.parse( responseText )
- 其他:就直接用responseText