跨域JSONP的疑问

1,使用跨域JSONP的时候,需要取的数据有不一定是fn([。。。])这样的格式的,这不是取数据的时候能控制的啊?有可能你去获取的时候得到的是[。。。]就只是一个数组,那跨域JSONP的方式不就失败了?
2,怎么样算是同一个域名,这视频里面没讲清楚啊?怎么样有算是不同的域名?

阅读 3.7k
6 个回答

如果没有回调函数,那就不叫jsonp。只有数据,就只能看着,干瞪眼

来自同一个地址的就是同域

首先,回答你第一个问题,关于jsonp获取数据得到的是一个单纯的数组的话,那就证明这个数据不可以使用jsonp来跨域获取,所以我们还有其他的跨域方式可以访问,比如cors,window.name,服务器代理,个人比较推荐服务器代理模式来访问你想得到的数据,这个是没有后端的限制的,因为服务器之间不存在跨域问题,
然后回答你第二个问题,关于什么是同域名,跨域的含义是,域名不同,协议不同,端口不同,https/http代表的就是协议,域名就是协议后面的内容

同域名,同端口,同协议也叫浏览器的同源策略,要使用JSONP跨域访问,要指定回调函数,跨域失败不一定是JSONP的问题,还有就是人家就是不让你访问

JSONP的原理是script标签的src可以是任意来源,最简单的理解:用cdn,http://apps.bdimg.com/libs/jq...

这样在你的页面上就有jquery环境了,如果jquery里面有个方法调用是

art('123');

那么,script引用会立马执行art这个方法,但是这个方法在jquery包里面没有,就会出错,
所以,在引用jquery之前(方法的位置无所谓,只有环境里面有这个方法)写好一个方法:

//这个方法写好了,没有执行,是上面的jquery包来调用这个方法
function art(msg){
    alert(msg)
}

总结

JSONP就是一个调方法的术语

你应该有服务器的管理权限,可以自定义调哪些方法,要给方法传什么参数,
而大多时候是别人的服务器,只能按照他给出的方法名称,我们在本地去实现他的方法(这种居多)

如果只能得到一串JSON,如:

{id:1,text:2,data:[{name:"",value:1},{name:"",value:1}]}

这个东西它运行了,就没了,你没办法再次得到这个对象。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题