【JavaScript】Ajax中contentType和dataType的区别,Unexpected token } in JSON at position 650 at JSON.parse

1.问题

在用ajax请求本地“json”数据的时候,发现请求属性用dataType: json的时候请求不到数据,而使用contentType: json可以请求到数据。这里的“json”为什么要打个双引号,其实这里是个大坑,后面会讲到。

dataType: json请求不到数据

contentType: json可以请求到数据

 

2.原因

经过分析,区分了这两种参数的区别:

contentType:

设置你发送给服务器的格式,有以下三种常见情况。

application/x-www-form-urlencoded
默认值:提交的数据会按照 key1=val1&key2=val2这种格式进行转换

multipart/form-data:
这也是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,就要让 form 的 enctype 等于这个值。

application/json:
服务端消息主体是序列化后的 JSON 字符串。

dataType:

设置你收到服务器数据的格式,有以下两种常见情况

text
返回纯文本字符串

json
自动将返回的纯文本字符串进行了json.parse操作,如果parse失败,提示出错误信息

简单总结就是如果请求的数据不是json格式的话,contentType: json还是会给你返回数据的,因为它返回的是经过序列化之后的字符串,参数一般写成:contentType: application/json。

而dataType: json返回来的一定是json格式的数据,因为它会自动将格式转换为json,默认使用了json.parse操作。

如果使用dataType: json请求报错,那就是请求不到数据,有可能是路径写错,json格式错误等等。

排查了一段时间,发现我用的数据json格式是有问题的,这也就是为什么开头我会用双引号“json”,再加上用dataType: json来请求数据,所以我就报错了。

随后再核对了一下数据格式,先用contentType: json得到数据,然后使用json.parse进行而格式转换,发现报错:

报错:Unexpected token } in JSON at position 650 at JSON.parse

这是因为被转换的值不符合JSON格式而造成的,说明数据不是json格式。

 

最后,这个问题让我了解了dataType: jsoncontentType: json的区别,涨姿势了!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子王量化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值