读书人

jsonp兑现跨域ajax调用

发布时间: 2012-11-25 11:44:31 作者: rapoo

jsonp实现跨域ajax调用

? ? ?Ajax在前台的开发中使用越来越多,为前台用户体验带来了很大的提升。但是由于XMLHttpRequest的安全限制,普通的Ajax请求不能实现跨域访问,这主要是由于浏览器的浏览器的同源策略限制导致的。可是在有些场景下,我们非常希望通过Ajax的方式获取远程的数据,这样就不需要再通过后台进行数据的获取,会极大的减小开发量。

? ? ? ?实现前台跨域访问,我们可以通过frame或者script标签的src来实现,这种方式可以进行远程数据的获取,但是这两种方式需要我们自己去监听不同的事件,处理起来比较复杂,程序员的好习惯就是lazy了,我们会寻找更加简单的解决方案。一种解决方案就是本文将要介绍的JSONP。

?

JSONP和JSON

?

? ? ? JSONP维基百科的解释JSONPJSON with Padding)是资料格式?JSON?的一种“使用模式”,可以让网页从别的网域要资料。另一个解决这个问题的新方法是跨来源资源共享。

? ?由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com 的服务器沟通,而HTML?的?<script>?元素是一个例外。利用?<script>?元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的 JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

? ?JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。在知道JSONP是什么之后,我们要来看下怎么用JSONP。其实很多优秀的js库都已经实现了JSONP,而且很好的屏蔽了其技术细节,使用是就和普通的Ajax调用没有区别。我们来看下JQuery的实现方式和使用方式。

? ?简单原理:

? ?客户端:?

?? ?JQuery的JSONP使用

? ? ?先看一个简单的例子

? ? ? <script>

? 从返回值可以看到,后台应该返回一个合法的js函数调用,而函数名称就是JQuery自动生成的那个。那么这个函数时在哪儿生成的呢,和我们在getJSON里定义的callback是什么关系呢,JQuery实现的魔法在哪儿呢?

?在jquery的源码里,我们看到这样一段

?// Install callback

0 Pink_aRT__UFONET_20121 yoga!2 I love this pic3 P10208704 P10208715 Monday morning6 Sexy_K?z?l_77___UFONET_20127 hide and seek8 9 Dexter10 Nightlife11 12 Dior & Daeron13 Dior & Daeron14 Dior & Daeron15 Black cats for Halloween16 Dior & Daeron17 Dior & Daeron18 kitten 2
?

读书人网 >JavaScript

热点推荐