简述 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域服务器的一个客户端。

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

你可能感兴趣的:(JavaScript,jsonp,跨域,json,Ajax)