javascript - 尝试使用jsonp 解决ajax 跨域解决
PHP中文网
PHP中文网 2017-04-10 13:12:58
[JavaScript讨论组]

在服务器端,有一个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。

求指教,多谢。

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
巴扎黑

用jquery+jsonp的话,服务端要使用动态语言(例如php)获取请求的callback参数获取回调函数的名称,然后返回结果,例如php的

$jsondata = '{
"issingle": false,
"bgpicwidth": 360,
。。。
})';
echo $_GET['callback'].'('.$jsondata.')'; 

也就是说让jquery完成整个解析的过程,然后你在

success: function(data) {
    // 使用你定义的回调内容
    CallBack(data);
}

这时,CallBack拿到的是js object

或者你可以用jQuery.getScript的方式调用你服务端的静态脚本内容,这时CallBack拿到的是js string,然后你自己解析

伊谢尔伦

jQuery.ajax 不是这么用的吧,见文档:

"jsonp": Loads in a JSON block using JSONP. Adds an extra "?callback=?" to the end of your URL to specify the callback. Disables caching by appending a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option is set to true.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号