前台设计中,涉及到跨域访问的时候,
通常情况下都会使用jsonp,
但是,有时候这个jsonp的Ajax请求已经返回数据了,但是success得函数却不能执行,
也不提示任何错误,
这里就要在Ajax请求的error函数里面去捕捉错误了
Ajax请求如下
$.ajax({
async: false,
url: "",
type: "post",
dataType: 'jsonp',
jsonp: 'callbackparam',
jsonpClaaback: "success_jsonpCallback",//用户定义的callback函数,没有定义的话会jQuery会自动生成以jQuery开头的函数
data: {},
error: function (XMLHttpReuqest, textStautus, errothrown) {
console.log(XMLHttpRequest.status);
console.log(XMLHttpReuqest.readyState);
console.log(XMLHttpRequest.responseText);
console.log(textStautus);
console.log(errothrown);
},
success: function (json) {
alert(json);
}
});
console.log(XMLHttpRequest.status);//返回200 说明正确
console.log(XMLHttpReuqest.readyState);//返回4,说明饭也正确,页面可以调用这些数据
console.log(XMLHttpRequest.responseText);//显示返回的数据,要的就是这些数据,但是在success中却不能处理
console.log(textStautus);//parseerror提示这个错误,重点就在这个错误上
console.log(errothrown);
这个parseerror的parse 是不是很熟悉?
对 这个就是jQuery里面转换成json的方法parseJson,
而这个parseerror的意思就是json解析错误,这里面就找到问题了
是你后台返回的json格式有问题
jQuery库从1.4开始对json格式的要求开始严格,
按照我上面的Ajax请求,返回的数据格式应该是下面的格式
success_jsonpCallback({"id":"123a","age":23,"name":"amy"});
除了这个返回格式,其他都会报parseerror的错误
这里面必须要注意最后的那个分号
因为返回的是一个函数,在jQuery里面需要以分号结尾。