尝试使用jsonp 解决ajax 跨域解决


在服务器端,有一个txt文件,里面保存的是json格式的数据,如下所示:
{
"issingle": false,
"bgpicwidth": 360,
。。。
}

使用ajax获取文件的时候,会报错。

尝试使用jsonp解决问题,做出的改动如下:
服务端的txt文件修改如下:
CallBack({
"issingle": false,
"bgpicwidth": 360,
。。。
})

js代码如下:


 function CallBack(data){
    alert(data.issingle);
}

var url = 'http://api.XXX.com/603/arealist_jsonp.txt?callback=CallBack';
function area_test_jsonp(){
    $.ajax({
        url: url,
        dataType: 'jsonp',
        processData: false,
        type: 'get',
        success: function(data) {
            alert('ok');
            alert(data);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert('error');
            alert(XMLHttpRequest.status);
            alert(XMLHttpRequest.readyState);
            alert(textStatus);
        }
    });
    return false;
}

结果虽然可以通过CallBack获取数据,但还是会报错,执行area_test_jsonp中error的部分,XMLHttpRequest.status为200,XMLHttpRequest.readyState为4,textStatus为parsererror。

求指教,多谢。

jquery json Ajax JavaScript

Sumner 10 years, 9 months ago
  1. url 中不用指定 callback 参数。对于 jQuery 中的 jsonp 来说, callback 参数是自动添加的
  2. 默认情况下,jQuery 生成的 jsonp 请求中 callback 参数是形如 callback=jQuery180099599698651582_1393992892572 这种根据看似随机的名字,对应的就是 success 那个处理函数,所以一般不用特意处理。
  3. 如果响应内容中是写死了 callback 名的话,那么可以对 jQuery 的 jsonp 指定 callback 名,如:

 jQuery.ajax({
    url: 'http://api.XXX.com/603/arealist_jsonp.txt',
    dataType: 'jsonp',
    jsonpCallback: 'CallBack',
    success: function(data) {
        // do what you want
    }
})

蹲在厕所数阿冀 answered 10 years, 9 months ago

Your Answer