状态码为200时 jQuery ajax报错
1. 问题现象
HTTP 状态码为 200 OK 时, jquery ajax报错
2. 问题原因
jquery ajax的dataType字段包含:json, 但是服务端返回的数据不是规范的json格式,导致jquery解析json字符串报错,最终导致ajax报错。
jQuery ajax 官方文档上说明:
"json": Evaluates the response as JSON and returns a JavaScript object. Cross-domain "json" requests are converted to "jsonp" unless the request includes jsonp: false in its request options. The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead. (See json.org for more information on proper JSON formatting.)设置dataType为json时,jquery就会去解析响应体为JavaScript对象。跨域的json请求会被转化成jsonp, 除非设置了jsonp: false
。JSON数据会以严格模式去解析,任何不规范的JSON字符串都会解析异常并抛出错误。从jQuery 1.9起,一个空的响应也会被抛出异常。服务端应该返回一个null
或者{}
去代替空响应。参考json.org, 查看更多内容
3. 解决方案
这个问题的原因有两个。
后端返回的json数据格式不规范
HTTP状态码为200,但是返回空的响应
所以后端在返回结果时,不要使用空的响应,也不应该去手动拼接JSON字符串,而应该交给响应的库来实现JSON序列化字符串工作。
- 方案1:如果后端确定响应体中不返回数据,那么就
把状态码设置为204
,而不是200。状态码为204时,jQuery就知道响应体中没有数据,也不需要去解析。我一直逼着后端同事这么做。
- 方案2:如果后端接口想返回200,那么请返回一个
null
或者{}
去代替空响应 - 方案3:别用jQuery的ajax,换个其他的库试试
4. 参考
相关推荐
TONIYH 2020-07-22
83510998 2020-07-18
wcqwcq 2020-06-26
delmarks 2020-06-14
ppsurcao 2020-06-14
tthappyer 2020-06-07
kentrl 2020-11-10
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo
ajaxyan 2020-11-09
zndy0 2020-11-03
学留痕 2020-09-20
Richardxx 2020-11-09
learningever 2020-09-19
chongxiaocheng 2020-08-16
ajaxhe 2020-08-16
lyqdanang 2020-08-16
curiousL 2020-08-03