属性含义
contentType 主要设置你发送给服务器的数据格式
默认值
原生Ajax:text/plain。
Jquery Ajax(Map) + Form表单POST提交:application/x-www-form-urlencoded。
属性值
主要是application/x-www-form-urlencoded、application/json和text/plain,还有text/xml、multipart/form-data。
- 浏览器默认类型是application/x-www-form-urlencoded,简单的json数据可以直接传,但application/x-www-form-urlencoded是没有办法将复杂的 JSON 组织成键值对形式
如带嵌套的JSON:
data:{
data: {
a: [{
x: 2
}]
}
}
- 传复杂的JSON数据就需要使用 ‘application/json’, 但注意传数据需要将其JSON.stringify序列化,后端接收的时候需要JSON.parse反序列化来得到参数
如:$.ajax({
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({a: [{b:1, a:1}]})
})
- text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理,主要用以解决返回json(json字符串是从一个json文件中读取的)时,带转义符的情况,当然如果只是返回个对象,转成json,就不会存在这种带转义符的情况
- multipart/form-data 表单上传文件使用,如果你使用$ajax上传文件,可能会碰到后台报错the request was rejected because no multipart,该问题的参考解决方法
- text/xml 存储数据,存储配置文件等需要结构化存储的地方使用
参考链接:
https://www.jianshu.com/p/f4d92b3d387d
https://blog.csdn.net/yifansj/article/details/62097595
https://blog.csdn.net/qq_23035335/article/details/107355012
https://blog.csdn.net/Stephen_mu/article/details/100086682
顺便在这里记录记录一下ajax四种同步请求方式
- 方法一:$.ajaxSettings.async = false;
- 方法二:$.ajaxSetup({ async : false });
- 方法三:$.ajax({})添加属性:async : false
- 方法四:直接采用原生的XmlHttpRequest(我朋友称它为‘小黄人XHR’)发送请求
// 创建XmlHttpRequest请求对象
const xhr = new XMLHttpRequest();
// 设置请求地址
const url = baseUrl + "/metadata/metaTheme/haveTable.do";
xhr.open('post', url, false); // 同步请求,true:异步请求
// 指定请求内容类型
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// 配置请求参数(上面是form表单内容类型的话,下面参数格式要用key=value&...)
const params = 'THEMEID=' + PARENTTHEMEID;
// 发送请求
xhr.send(params);
// 以json格式解析返回数据
const result = JSON.parse(xhr.responseText);
// TODO 接下来对返回数据进行处理
小结:
方式一和方式二:必须在ajax请求前增加,否则不对当前请求生效,可以和$.ajax()、$.post()、$.get()、$.getJSON()
结合使用;
方式三:必须和$.ajax()
结合使用,不能与$.post()、$.get()、$.getJSON()
使用;