JSONP

定义

JSONP(json with padding)是json的一种”使用模式”,可以让网页从别的域名(网站)获取资料,即跨域读取数据。

优缺点

优点

不想ajax收到同源策略的限制,兼容性好,不需要XMLHttpRequest或ActiveX的支持

缺点

只支持GET请求,不支持POST请求;只支持HTTP请求,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。

原理

JSONP就是通过动态添加一个script标签,通过src属性来获取资源。

HTML 中的src属性不是受同源策略的影响。

实际用例

服务器端的(nodejs):

// 访问地址:http://192.168.0.103:8998/api?callback=query
route.get('/api', (req, res) => {
    var callback = req.query.callback;
    var data = callback + '({\
        "StateCode": "1",\
        "ErrMsg": "",\
        "ServiceKey": "b82d6fa5-b56c-468b-9187-9beb0971bcd0",\
        "RecordCount": 2,\
        "Datas": [\
            {\
            "PETA_RN": 1,\
            "ITEM_ID": 19,\
            "ITEM_NAME": "深圳市裕璟幸福家园标段",\
            "COUNTY_NAME": "四川省巴中市通江县"\
            },\
            {\
            "PETA_RN": 2,\
            "ITEM_ID": 9,\
            "ITEM_NAME": "敏氏标段",\
            "COUNTY_NAME": "四川省巴中市通江县"\
            }\
        ]\
    })';
    res.send(data);
})


// 得到的数据格式为:
query({ "StateCode": "1", "ErrMsg": "", "ServiceKey": "b82d6fa5-b56c-468b-9187-9beb0971bcd0", "RecordCount": 2, "Datas": [ { "PETA_RN": 1, "ITEM_ID": 19, "ITEM_NAME": "深圳市裕璟幸福家园标段", "COUNTY_NAME": "四川省巴中市通江县" }, { "PETA_RN": 2, "ITEM_ID": 9, "ITEM_NAME": "敏氏标段", "COUNTY_NAME": "四川省巴中市通江县" } ] })

客户端(jquery):

$.ajax({
        type: 'get',
        url: 'http://192.168.0.103:8998/api?callback=query',
        dataType: 'jsonp',
        jsonpCallback: 'query',
        success: function (data) {
            console.log(data);
        },
        error: function (xOptions, textStatus) {
            console.log(xOptions);
            console.log(textStatus);
        }
    });

jQuery会做这样一个操作,在window对象下创建一个名叫query的函数:

window['query'] = function (json) {
    console.log(json);
}
// 输出的结果为:
{ "StateCode": "1", "ErrMsg": "", "ServiceKey": "b82d6fa5-b56c-468b-9187-9beb0971bcd0", "RecordCount": 2, "Datas": [ { "PETA_RN": 1, "ITEM_ID": 19, "ITEM_NAME": "深圳市裕璟幸福家园标段", "COUNTY_NAME": "四川省巴中市通江县" }, { "PETA_RN": 2, "ITEM_ID": 9, "ITEM_NAME": "敏氏标段", "COUNTY_NAME": "四川省巴中市通江县" } ] }

callback和success的区别

success

type: Function (Anything data, String textStatus, jqXHR jqXHR),

如果请求成功,则调用这个函数。这个函数会得到三个参数:

    1、从服务器端返回的数据
    2、描述状态的字符串
    3、一个jqXHR(jQuery 1.4.x以上的版本,XMLHttpRequest)对象

callback

type: String or Function()

请求JSONP的指定回调函数。最好让jQuery生成一个唯一的名称,便于管理请求,并提供回调和错误处理。在jQuery 1.5中,您可以为该设置使用一个函数,在这种情况下,jsonpCallback的值被设置为该函数的返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值