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 调用的方式处理数据就行了,
  1. $.ajax({
  2.         url: 'http://ip.taobao.com/service/getIpInfo.php?ip=x.x.x.x',
  3.         type: 'GET',
  4.         dataType:'jsonp',  
  5.   jsonp:'callback',
  6.   jsonpCallback:"?",
  7.   success: function(data){
  8.                 var retFree = "<br />----------------taobao---success---------------<br />";
  9.                 retFree += JSON.stringify(data)+"<br />"
  10.                 document.getElementById("ipInfoFromTaoBao").innerHTML = retFree;
  11.         },
  12.         error: function(data){
  13.                 var retFree = "<br />----------------taobao----error--------------<br />";
  14.                 retFree += "error from taobao:"+ JSON.stringify(data)+"<br />"
  15.                 document.getElementById("ipInfoFromTaoBao").innerHTML = retFree;
  16.         },
  17. });
复制代码

如果没有用 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://www.firemail.wang:8088/) Powered by Discuz! X3