firemail
标题: jsonp跨域的问题 [打印本页]
作者: java 时间: 2017-9-20 15:28
标题: jsonp跨域的问题
本帖最后由 java 于 2017-9-20 15:30 编辑
1、需要接口那边支持,一般是你传过去两个参数 回调函数名 和 查询参数,比如你主楼的这个:
?callback=jQuery110205438157829921693_1430892961914&_=1430892961916
回调函数名是 jQuery110205438157829921693_1430892961914,查询参数是 _=1430892961916
如果接口支持 jsonp,就应该返回类似这样的数据:
jQuery110205438157829921693_1430892961914({'type':'test'});
也就是接口会返回一段 js 代码,调用你传入的回调函数,传入的实参就是接口数据,所以需要本地实现 jQuery110205438157829921693_1430892961914 这个函数
如果你是用的 jQuery,直接就按照普通的 ajax 调用的方式处理数据就行了,
- $.ajax({
- url: 'http://ip.taobao.com/service/getIpInfo.php?ip=x.x.x.x',
- type: 'GET',
- dataType:'jsonp',
- jsonp:'callback',
- jsonpCallback:"?",
- success: function(data){
- var retFree = "<br />----------------taobao---success---------------<br />";
- retFree += JSON.stringify(data)+"<br />"
- document.getElementById("ipInfoFromTaoBao").innerHTML = retFree;
- },
- error: function(data){
- var retFree = "<br />----------------taobao----error--------------<br />";
- retFree += "error from taobao:"+ JSON.stringify(data)+"<br />"
- document.getElementById("ipInfoFromTaoBao").innerHTML = retFree;
- },
- });
复制代码
如果没有用 jQuery,就需要这样做:
2、你需要在本地实现这个函数 jQuery110205438157829921693_1430892961914,用来处理接口返回数据,比如:
var jQuery110205438157829921693_1430892961914 = function (data) { console.log(data); }
3、为 body 添加 script 元素,开始执行请求:
var script = document.createElement('script');
script.src = 'http://xxx.com?callback=jQuery110205438157829921693_1430892961914&_=1430892961916';
document.body.appendChild(script);
https://www.v2ex.com/t/188896
作者: java 时间: 2017-9-20 15:30
jsonp对返回的json格式报错"Uncaught SyntaxError: Unexpected token :"
要跨域必须要jsonp,但这返回的是json串,不是callback的模式,所以页面代码我是没有处理成功的,
而是在提供页面服务的后台java代码里用httpclient定期获取这个json串, 再提供到页面处理的.
http://www.oschina.net/question/219762_142069?sort=default&p=1
欢迎光临 firemail (http://firemail.wang:8088/) |
Powered by Discuz! X3 |