使用jsonp有数据返回,但是success不执行的解决办法

前台设计中,涉及到跨域访问的时候,

通常情况下都会使用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里面需要以分号结尾。

你可能感兴趣的:(javascript,jquery特效)