今天发现在返回值正确的情况下,ajax走error方法,没有走success方法,使用以下方法自测
原代码:
$.ajax({
url: environment.serverUrl + '/questionClassify/modify',
type: 'put',
data: JSON.stringify(body),
async: false,
// 返回的数据类型是json
dataType: 'application/json',
contentType: 'application/json;charset=UTF-8',
success: function (data) {
alert(data.message);
},
error: function (data) {
alert(data.responseText);
}
});
自测修改代码:
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
运行结果:
alert(XMLHttpRequest.status); // 弹出 200 正常
alert(XMLHttpRequest.readyState); // 弹出 4 正常
alert(textStatus); // 弹出parsererror错误
parsererror错误是返回类型错误,在原代码中dataType: ‘application/json’,我指定了返回值为json,所以后端一定要返回标准格式的json字符串,要不jquery1.4+以上版本会报错的,因为不是用eval生成对象了,用的JSON.parse,如果字符串不标准就会报错。
解决方法:
先把 dataType: 'application/json',注释掉
在 success:function(data,textStatus){
console.log(data);
观察显示的串是否符合 json 格式
最后发现返回的值的确是json格式,但不是标准json格式,所有报错,在下水准太低,不会转为标准格式,所有我就把dataType: ‘application/json’,彻底注释掉了,不指定返回值类型了。