ajax的contentType属性理解

属性含义

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 组织成键值对形式
如带嵌套的JSONdata:{
	  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()使用;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值