Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1682|回复: 1

jsonp跨域的问题

[复制链接]

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
发表于 2017-9-20 15:28:56 | 显示全部楼层 |阅读模式
本帖最后由 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


回复

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
 楼主| 发表于 2017-9-20 15:30:08 | 显示全部楼层
jsonp对返回的json格式报错"Uncaught SyntaxError: Unexpected token :"

要跨域必须要jsonp,但这返回的是json串,不是callback的模式,所以页面代码我是没有处理成功的,
而是在提供页面服务的后台java代码里用httpclient定期获取这个json串, 再提供到页面处理的.

http://www.oschina.net/question/219762_142069?sort=default&p=1



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-3-29 18:29 , Processed in 0.058051 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表