`
sha851092391
  • 浏览: 72565 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

简述 JSONP

阅读更多
JSONP其实和Ajax的技术一样都不是什么新东西,而是多种技术的灵活运用而已,都知道Ajax请求是不能跨域的,如果想跨域请求的话该怎么办呢,其实可以使用别的方法来实现解决Ajax的跨域问题?
方案一:使用iframe来解决Ajax跨域问题。
方案二:使用JSONP方式解决Ajax跨域问题。
方案三:使用反向代理

方案一是使用一个ifram元素来加载远程的数据,在iframe的onload设置回调方法,数据加载完毕之后就使用JS处理返回的数据。

方案二其实是使用<script/>标签来实现的,首先页面的js在<head/>标签里面创建一个<script/>元素,src属性的值就是你请求的url,服务器返回的内容就有些特别了,这就是JSONP关键的所在,一般包含两个部分,一部分是返回的json格式的数据,另一部分其实是页面的回调方法,例如:
var data={message:"Hello World!"};  //返回数据
callback(data);  //客户端页面的回调方法

咦,这不就是JavaScript的代码吗?没错,其实JSONP只是一种解决方案,并不是什么新技术。
当数据加载完毕之后,就会调用callback方法,这样子就实现了跨域的请求了。
到这里你应该会知道为什么JSONP请求的url格式是url?callback=?这种形式了,其实这样只是为了根据客户端动态设置回调方法而已,没什么新奇的。

方案三使用反向代理,用户是先请求同域的服务器,然后跨域的操作就交给服务器了,服务器就会去请求你指定的url,然后服务器将请求的数据返回到本域的客户端,这样子也可以解决跨域的问题; (A域)客户-->(A域)服务器-->(B域)服务器,在这次请求中A域服务器其实是B域服务器的一个客户端。

如果有那些地方说的有误的话,请大家多多指点。

1
0
分享到:
评论
2 楼 sha851092391 2011-12-18  
grandboy 写道
方案一很多浏览器还是不允许。第二种方案又感觉太繁琐。有的时候就干脆用apache的反向代理搞到一个域里来。

一般情况下,反向代理也ok,当涉及到需要读取cookie信息的话就有点难度了。
1 楼 grandboy 2011-12-17  
方案一很多浏览器还是不允许。第二种方案又感觉太繁琐。有的时候就干脆用apache的反向代理搞到一个域里来。

相关推荐

Global site tag (gtag.js) - Google Analytics