- 浏览: 686349 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
di1984HIT:
学习了,学习了!
Tomcat的URL中文乱码解决以及传输优化 -
arottenapple:
...
我的二十一天CoreJava 学习笔记 -
黯淡流觞:
...
我的二十一天CoreJava 学习笔记 -
onlyOneToOne:
wsc830719 写道@RequestMapping(val ...
spring mvc3中 ResponseBody中文乱码 -
waj_615:
但是打印订单不是简单的string 啊
用java实现打印功能
原文地址:http://dojotoolkit.org/documentation/tutorials/1.7/jsonp/
难度:初级
版本:1.7
JSONP已经成为了一种跨用请求的通过技术了。在这个教程中,你可以学到如何使用JSONP来进行跨域请求。
开始教程
dojo的基础ajax模块已经提供了简单有效的动态ajax功能,但是,并不能使用dojo的xhr进行安全的跨域请求,怎么办?大多数的浏览器都实现了W3C组织的Cross-Origin Resource Sharing的规范来支持跨域请求的功能,但不是所有的浏览器都支持的。有方法解决,我们可以使用JSONP技术来支持跨域的请求。
Bob Ippolito在2005年就发表过文章来介绍JSOPN技术,现在已经包括有Google,Twitter,Facebook等都提供了这种服务的全部API,DOJO的dojo/io/script模块就无缝的支持了读取这种服务的功能,而且使用起来非常的简单。
那到底什么是JSONP技术呢?不像XHR只能在一个域里来请求.JSONP通过动态的加载<script>标签来发起请求,并在有返回值时执行回调函数。如一个请求为endpoint?q=dojo&callback=callme 那么他的返回值可能是callme({id: "dojo", some: "parameter"})
当浏览器执行到这个脚本时,它就会调用callme()这个方法,并把相应的参数传递过去。当本地的程序有定义callme这个方法时,将会接收这个方法。注意,这个函数是从第三方服务器中传过来的并执行的,所以你要确认这个第三个的合法和安全性。这不是让你禁用JSONP,而是让你只和信任的服务进行请求。
使用JSONP进行跨域请求可以降低浏览器与服务器的连接量。浏览器限制在同一时间对服务器发出的请求量。最坏的情况,在IE6上同时会有两个连接,但在最新的浏览器时会同时有6到8个连接。但使用跨域请求资源时,它将不再计算你同时连到服务器中的连接数
dojo/io/script 将会自动创建脚本元素和执行回调函数,并且也是使用dojo是常用的迟延技术
//include the script modules require(["dojo/io/script", "dojo/dom", "dojo/_base/array", "dojo/domReady!"], function(ioScript, dom, arrayUtil){ //wait for the page and modules to be ready... //Make a request to search twitter for #dojo ioScript.get({ url: "http://search.twitter.com/search.json", content: {q: "#dojo"}, callbackParamName: "callback" }); });
代码中基本和dojo/_base/xhr中的一样,只是加入了callbackParamName的属性,这个属性是dojo以参数的形式告诉服务器,要执行哪个回调函数。这有点像是通过服务改变服务,从这点来说,你可以把它当成是有别的附加的功能函数。下面来看一个有更多内容的例子
//first do the io script request ioScript.get({ url: "http://search.twitter.com/search.json", content: {q: "#dojo"}, callbackParamName: "callback" }).then(function(data){ //Loop through the data results and create an array containing //each tweet's text wrapped in an LI var tweets=[]; arrayUtil.forEach(data.results, function(item,idx){ tweets.push("<li>" + item.text + "</li>"); }); //join the array of LIs together and make them the //innerHTML of the content holding node. dom.byId("tweets").innerHTML = tweets.join(""); });
代码很漂亮,我们再来加一点动画的效果
require(["dojo/io/script","dojo/domConstruct", "dojo/domReady!"], function(ioScript, domConstruct){ //make the request just as before ioScript.get({ url: "http://search.twitter.com/search.json", callbackParamName: "callback", content: {q: "#dojo"} }).then(function(data){ //we're only interested in data.results, so strip it off and return it return data.results; }).then(function(results){ //create an interval timer that will remove the first item in //the array and render it. Stop the loop when the results have been //exhausted. var handle = setInterval(function(){ domConstruct.create("li", {innerHTML: results.shift().text},"tweets"); if (results.length < 1){ clearInterval(handle); } }, 200); }); });
通过JSONP来动态生成脚本的有一个缺点,它不能返回错误信息。如果浏览器的请求遇到了404或500错误,那么dojo/io/script的回调函数将没有任何反应。为了防止你的空等待,你可以设置一个请求时间timeout。如果请求没有及时返回信息则被timeout打断。
结论
JSONP可以让你能通过访问不同的服务器而获得大量丰富的资源。大多数服务提供商都提供了大量的JSONP服务。及时是在同一个项目中,你也可以通过使用JSONP访问而组成多个子域,以提供更强大的访问连接功能。
发表评论
-
dojo封装dialog提示框
2012-06-20 10:20 5636/** * 显示dojo的弹出框.前提是已经引用了相 ... -
dojo封装表单ajax提交
2012-06-20 10:16 1709/** * dojo的ajax提交form(post ... -
封装创建dojo的dialog
2012-06-18 13:55 0/** * 显示dojo的弹出框.前提是已经引用了相 ... -
自定义封装dojo通用ajax提交表单
2012-06-18 13:52 2648/** * dojo的ajax提交form(post ... -
使用dojo的dialog自定义confirm效果
2012-06-18 13:43 5114/** * 使用dojo dialog模拟confi ... -
dojo 制做非模态窗口dialog
2012-06-16 13:27 4324dojo的dialog效果基本上都是模态的,也就是说,在弹出窗 ... -
dojo1.7的加载方法
2012-06-01 17:16 4259对于dojo1.7来说,最大的变化就是引入了AMD异步加载器。 ... -
不翻译DOJO了
2012-05-16 17:57 1100翻译DOJO的时间并不长。总是感觉把老外的话翻译过来很是生硬, ... -
dojo1.7翻译 数组工具(Arrays Made Easy)
2012-05-14 10:55 1954英文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 Dijit的主题,按钮和文本框(Dijit Themes, Buttons, and Textboxes)
2012-05-03 15:52 2192原文地址:http://dojotoolkit.org/ ... -
dojo1.7翻译 动画效果(Animations)
2012-05-02 12:08 2755原文地址:http://dojotoolk ... -
dojo1.7翻译 动态效果(Dojo Effects)
2012-04-27 10:15 1315原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 处理DOM(Dojo DOM Functions)
2012-04-26 15:51 2512原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 ajax功能(Ajax with Dojo)
2012-04-24 15:04 1564原文地址:http://dojotoolk ... -
dojo1.7翻译 搜索节点功能(Using dojo/query)
2012-04-23 15:32 1886原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 hello,dojo
2012-04-22 15:21 2142原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义类(Classy JavaScript with dojo/_base/declare)
2012-04-20 15:34 2536原文地址:http://dojotoolkit.org/doc ... -
dojo1.7翻译 定义模块(Defining Modules)
2012-04-18 17:21 6837原文地址:http://dojotoolkit ... -
dojo1.7翻译 通过dojoConfig来配置dojo
2012-04-18 09:20 5207原文地址:http://dojotoolk ... -
dojo1.7翻译 Hello,World
2012-04-17 10:17 1595原文地址:http://dojotoolkit.org/ref ...
相关推荐
dojo/store是Dojo的数据存储接口,为数据操作提供了一致的API,支持各种数据源,如内存、JSONP、Ajax等。这使得在不同数据源间切换变得简单。 六、dojo/aspect `dojo/aspect`模块提供了面向切面编程(AOP)的支持,...
【Dojo 1.7 知识点详解】 Dojo 1.7 是 Dojo Toolkit 重要的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的主要焦点在于Asynchronous Module Definition (AMD),这是一种优化...
【Dojo 1.7 中文版本注释功能说明】 Dojo 1.7 是一个重大的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的核心亮点是实现了Asynchronous Module Definition (AMD)机制,这是一项...
10. **dojo/request**: Dojo 1.7 包含了`dojo/request`模块,用于处理HTTP请求,如GET、POST、PUT、DELETE等,支持异步和同步操作,同时提供了错误处理机制。 这个"最新dojo包"中的实例文件可以帮助初学者快速理解...
Dojo 框架的核心提供了诸如DOM操作、事件处理、AJAX请求、动画效果等功能。在Dojo 1.7 中,这些功能被重新组织并模块化,使得开发者可以根据需要按需加载,显著提高了页面加载速度。AMD模块化系统的引入是这一版本的...
对于那些不支持CORS(跨源资源共享)的旧浏览器,Dojo提供了JSONP(JSON with Padding)支持,通过动态插入`<script>`标签来实现跨域数据获取。 11. **dojo.io.iframe** 当需要处理复杂的跨域场景,如上传文件或...
JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了浏览器允许加载跨域JavaScript脚本的特性来实现AJAX的跨域请求。由于同源策略的限制,普通的AJAX请求不能跨越域名进行通信,但JSONP巧妙地绕过了这一...
7. **dojo.io.script**: 对于需要使用JSONP(JSON with Padding)或跨域请求的情况,dojo提供了`dojo.io.script`模块。它可以帮助开发者绕过同源策略限制,与不同源的服务器进行数据交互。 8. **dojo.on**: 用于...
dojo JavaScript框架是Web开发中的一个强大工具,特别在处理Ajax(Asynchronous JavaScript and XML)请求时,它提供了丰富的功能和高效的性能。Dojo的核心在于它的模块化系统,这使得开发者可以方便地导入和管理所...
dojo.xhr是dojo中处理Ajax请求的核心模块,它提供了多种方法,如xhrGet、xhrPost等,用于发起GET和POST请求。这些方法允许开发者传递参数,处理响应,并提供错误处理机制。xhrGet用于获取服务器上的数据,而xhrPost...
5. JSONP (JSON with Padding): 跨域数据访问时,由于同源策略的限制,AJAX通常无法向不同源发送请求。Dojo支持JSONP,通过在脚本标签中注入外部源的JavaScript,从而绕过这个限制。 6. `dojo.contentHandlers`: 这...
Dojo框架充分集成了Ajax技术,通过其内置的XhrRequest对象,使得异步数据请求变得异常简单。这不仅提升了用户体验,还优化了Web应用的性能。 ### 使用Dojo的实践案例 1. **强大的Web表单:**Dojo提供了丰富的Dijit...
4. **JSON-P (JSON with Padding)**: Dojo也支持跨域数据获取,通过JSON-P技术。JSON-P是一种绕过同源策略限制的方法,通过在返回的JSON数据前添加一个预先定义好的回调函数名,使得数据能在客户端被调用执行。 5. ...
Dojo 提供了强大的异步请求功能,通过`dojo.xhr`或`dojo.request`模块,可以方便地处理HTTP请求和JSONP跨域请求,与服务器进行数据交换。 5. **dojo/_base:** `_base`是Dojo的基础模块,包含了一些核心功能,如...
此外,Dojo还支持JSONP(JSON with Padding)和跨域AJAX请求,这对于构建分布式应用非常有用。 除了xhr模块,Dojo还提供了一些高级的AJAX功能,如 Deferred 对象和Promises,它们对于处理异步操作的流程控制特别...
《Dojo 1.7 深入解析与应用实践》 Dojo 是一个全面的JavaScript工具库,专为构建富互联网应用程序(RIA)而设计。这个“dojo-release-1.7.1-src”压缩包包含了Dojo 1.7.1的源代码,为开发者提供了深入了解和自定义...
Dojo 0.4.2还提供了`dojo.io.bind`,这是一个更为通用的Ajax函数,能够处理更复杂的请求场景,如上传文件或使用流式传输。 在Dojo中,`dojo.data`模块则用于数据存储和检索,它与Ajax结合,可以方便地从服务器获取...
"dojo-0.4.3-ajax" 是一个与Dojo Toolkit相关的版本,专注于Ajax功能的实现。Dojo Toolkit是一个开源的JavaScript库,旨在提供一套全面的工具,用于开发富互联网应用程序(RIA)。在这个特定的版本0.4.3中,重点在于...
4. **Ajax通信**:Dojo的`dojo/xhr`模块提供了发送Ajax请求的方法,如`dojo/xhrGet`、`dojo/xhrPost`等,支持JSON、XML等多种数据格式。 5. **动画效果**:`dojo/fx`模块提供了丰富的动画效果,包括基本的淡入淡出...