jsonp实现跨域资源访问

平时项目中处理ajax跨域资源请求时,例如www.example2.com上的某个页面要请求www.example1.com的数据,我们使用得较多的是jsonp方式。jsonp通过JavaScript callback的形式实现跨域访问,其实现原理是:

在 Web 页面中插入动态脚本元素,该页面源指向其他域中的服务 URL 并且在自身脚本中获取数据。脚本加载时它开始执行。该方法是可行的,因为同源策略不阻止动态脚本插入,并且将脚本看作是从提供 Web 页面的域上加载的。通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,从而解决了跨域的数据请求。

前端使用jsonp的demo:

1. 使用jquery或zepto

其中callback是前端准备好的回调函数,在ajax请求中,会附加在get请求url的参数后面。服务器端以JavaScript语法的方式生成一个function,function的名字就是传递过来的callback。如getresult.cgi返回以下结果:

callback({'ret':0, 'data':[]});

客户端浏览器解析script标签(jqeury和zepto的实现代码中,动态生成了script标签并添加到页面中),并执行返回的JavaScript语句。

2. 直接创建script标签

在需要跨域请求的地方,动态创建script标签,并添加到页面中。

脚本加载后立即执行callback,即实现了跨域请求。

注意:jsonp只能处理get请求。

 

 

posted on 2013-07-26 20:28  cccccccccccc  阅读(788)  评论(0编辑  收藏  举报

导航