JSONP
来源:互联网 发布:spss数据标准化公式 编辑:程序博客网 时间:2024/06/07 06:35
定义
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=queryroute.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的值被设置为该函数的返回值。
阅读全文
0 0
- JSONP
- jsonp
- JSONP
- jsonp
- jsonp
- JSONP
- jsonp
- Jsonp
- jsonp
- JSONP
- JSONP
- JSONp
- JSONP
- jsonP
- JSONP
- JSONP
- jsonp
- jsonp
- matlab中的取余函数
- 使用VirtualBox虚拟机安装Ubuntu
- u盘启动盘制作工具哪个最好用?
- 04 WebGL 着色器编程语言GLSL ES的矢量和矩阵
- 函数的调用约定(_cdecl,_stdcall,_fastcall,_pascal)
- JSONP
- 查询数据库最近一周每天的数据的方法
- HDU 4864 Task
- Java集合框架图
- 随笔:POSIX
- (译)《地平线》的玩家动作系统(1)
- Android--线程--AsyncTask
- Android开源库之使用ZBar开源库实现二维码功能
- MySQL 2表及3表查询