日期:2014-05-16  浏览次数:20655 次

跨域返回的jsonp数据一定需要提供回调函数吗?
例如,从abc.com的一个脚本成功返回的数据是下面这样的
{"xxx":"xxx"}
前面没有回调函数名称,
还有其他办法可以将它转为对象来使用吗?

------解决方案--------------------
没有,根本取不到这个。

所谓JSONP,就是添加一个script标签,然后src指向那个url。

所以一定要是可执行的JS代码,只是返回{aa:11}肯定不是可执行的JS代码。

返回var data = {aa:11}或者test({aa:11})都可以,只是返回{aa:11}肯定是无解的。
------解决方案--------------------
引用:
Quote: 引用:

没有,根本取不到这个。

所谓JSONP,就是添加一个script标签,然后src指向那个url。

所以一定要是可执行的JS代码,只是返回{aa:11}肯定不是可执行的JS代码。

返回var data = {aa:11}或者test({aa:11})都可以,只是返回{aa:11}肯定是无解的。


貌似有点理解了,
json是一种数据格式,本身不支持跨域,
而jsonp的p指的是填充,意思就是在json的数据前面填充一个调用函数,
然后使用script标签来执行,以达到跨域的效果,
是这样的吗?



不能跨域的原因是 域名
json是数据的一种格式 
跨域是指 允许不允许你获取数据 数据的格式是不影响的

jsonp的原理 是因为js脚本的加载没有跨域  所以不用ajax 用一个 script标签 通过 他的src来访问 网站后台 这个src通常会加一个 jsonp=jsonpxxx的特别参数来标示调用的 函数名称
后台只要返回一个 这个函数名称包围的数据(json格式) 的字符串就可以了
当然调用者 会定义jsonxxx这个函数


------解决方案--------------------
自己做代理或者使用yahoo的jsonp在线代理都行