问题描述:
ajax 返回就是直接走then 的 失败函数,status是200,readyState是4,就是statusText是 parsererror
代码:
$.extend({
ajaxJson:function (method,url,param,success,error) {
$.ajax({
type: method,
async: true, //false为同步,true为异步
cache: false,
url: url,
timeout: 600000, //设置请求超时时间(毫秒)。此设置将覆盖全局设置。
data: JSON.stringify(param),
accept:"application/json, text/javascript, */*; q=0.01",
contentType:"application/x-www-form-urlencoded; charset=UTF-8",
}).then(function successCallback(resp){
// 成功回调
if(resp.code == 200){
success(resp); // 直接返回要处理的数据,作为默认参数传入之后done()方法的回调
} else{
alert(resp.desc);
return; // 返回一个失败状态的deferred对象,把错误代码作为默认参数传入之后fail()方法的回调
}
}, function errorCallback(err){
// 失败回调
console.log(err); // 打印状态码
alert("服务器请求失败,请联系管理员");
});
}
})
问题原因:
后端返回的数据类型和前端请求中dataType的要求类型不一致导致的。
dataType:
jquery 中 ajax 的 dataType 属性用于指定服务器返回的数据类型,如果不指定,jQuery 将自动根据 HTTP 包MIME 信息来智能判断,默认会将返回的数据当成字符串处理。datatype 值如下(这个列宽真真无力调整TT):
value | description |
---|---|
"xml" |
返回 XML 文档,可用 jQuery 处理。 |
"html" |
返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。 |
"script" |
返回纯文本JavaScript 代码。不会自动缓存结果,除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载) |
"json" |
返回 JSON 数据 。 |
"jsonp" |
JSONP 格式。使用JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数,经常被用来同主域名下不同二级域名下的跨域请求。 |
"text" |
返回纯文本字符串。 |
解决方法:
统一前后端数据交流的类型
// 可见没有指定 dataType: 'json', 加上之后问题解决了
...
dataType: 'json', // 指定 dataType
...
求赞,求鼓励~~~
如有错误,敬请指导!!感谢!! _
网友评论