`

dojo1.7翻译 ajax跨域请求(Getting Jiggy with JSONP)

    博客分类:
  • Dojo
 
阅读更多

原文地址: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访问而组成多个子域,以提供更强大的访问连接功能。

0
1
分享到:
评论

相关推荐

    Dojo1.7 Api chm

    dojo/store是Dojo的数据存储接口,为数据操作提供了一致的API,支持各种数据源,如内存、JSONP、Ajax等。这使得在不同数据源间切换变得简单。 六、dojo/aspect `dojo/aspect`模块提供了面向切面编程(AOP)的支持,...

    Dojo 1.7 版本注释.docx

    【Dojo 1.7 知识点详解】 Dojo 1.7 是 Dojo Toolkit 重要的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的主要焦点在于Asynchronous Module Definition (AMD),这是一种优化...

    Dojo 1.7 中文版本注释功能说明

    【Dojo 1.7 中文版本注释功能说明】 Dojo 1.7 是一个重大的版本更新,其中引入了显著的改进和新特性,尤其是对模块加载机制的革新。这一版本的核心亮点是实现了Asynchronous Module Definition (AMD)机制,这是一项...

    dojo 1.7 最新dojo包,内含最新的实例若干个。

    10. **dojo/request**: Dojo 1.7 包含了`dojo/request`模块,用于处理HTTP请求,如GET、POST、PUT、DELETE等,支持异步和同步操作,同时提供了错误处理机制。 这个"最新dojo包"中的实例文件可以帮助初学者快速理解...

    dojo 源码1.7汇总

    Dojo 框架的核心提供了诸如DOM操作、事件处理、AJAX请求、动画效果等功能。在Dojo 1.7 中,这些功能被重新组织并模块化,使得开发者可以根据需要按需加载,显著提高了页面加载速度。AMD模块化系统的引入是这一版本的...

    dojo-0.3.1-ajax

    对于那些不支持CORS(跨源资源共享)的旧浏览器,Dojo提供了JSONP(JSON with Padding)支持,通过动态插入`&lt;script&gt;`标签来实现跨域数据获取。 11. **dojo.io.iframe** 当需要处理复杂的跨域场景,如上传文件或...

    AJAX跨域请求json数据的实现方法

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了浏览器允许加载跨域JavaScript脚本的特性来实现AJAX的跨域请求。由于同源策略的限制,普通的AJAX请求不能跨越域名进行通信,但JSONP巧妙地绕过了这一...

    dojo Ajax

    7. **dojo.io.script**: 对于需要使用JSONP(JSON with Padding)或跨域请求的情况,dojo提供了`dojo.io.script`模块。它可以帮助开发者绕过同源策略限制,与不同源的服务器进行数据交互。 8. **dojo.on**: 用于...

    dojo JavaScript框架 Ajax学习

    dojo JavaScript框架是Web开发中的一个强大工具,特别在处理Ajax(Asynchronous JavaScript and XML)请求时,它提供了丰富的功能和高效的性能。Dojo的核心在于它的模块化系统,这使得开发者可以方便地导入和管理所...

    dojo的ajax的jar包

    dojo.xhr是dojo中处理Ajax请求的核心模块,它提供了多种方法,如xhrGet、xhrPost等,用于发起GET和POST请求。这些方法允许开发者传递参数,处理响应,并提供错误处理机制。xhrGet用于获取服务器上的数据,而xhrPost...

    dojo-0.4.0-ajax

    5. JSONP (JSON with Padding): 跨域数据访问时,由于同源策略的限制,AJAX通常无法向不同源发送请求。Dojo支持JSONP,通过在脚本标签中注入外部源的JavaScript,从而绕过这个限制。 6. `dojo.contentHandlers`: 这...

    Mastering Dojo JavaScript and Ajax Tools for Great Web Experiences

    Dojo框架充分集成了Ajax技术,通过其内置的XhrRequest对象,使得异步数据请求变得异常简单。这不仅提升了用户体验,还优化了Web应用的性能。 ### 使用Dojo的实践案例 1. **强大的Web表单:**Dojo提供了丰富的Dijit...

    dojo-0.4.1-ajax

    4. **JSON-P (JSON with Padding)**: Dojo也支持跨域数据获取,通过JSON-P技术。JSON-P是一种绕过同源策略限制的方法,通过在返回的JSON数据前添加一个预先定义好的回调函数名,使得数据能在客户端被调用执行。 5. ...

    dojo最新版本

    Dojo 提供了强大的异步请求功能,通过`dojo.xhr`或`dojo.request`模块,可以方便地处理HTTP请求和JSONP跨域请求,与服务器进行数据交换。 5. **dojo/_base:** `_base`是Dojo的基础模块,包含了一些核心功能,如...

    dojo相关的js

    此外,Dojo还支持JSONP(JSON with Padding)和跨域AJAX请求,这对于构建分布式应用非常有用。 除了xhr模块,Dojo还提供了一些高级的AJAX功能,如 Deferred 对象和Promises,它们对于处理异步操作的流程控制特别...

    dojo-release-1.7.1-src

    《Dojo 1.7 深入解析与应用实践》 Dojo 是一个全面的JavaScript工具库,专为构建富互联网应用程序(RIA)而设计。这个“dojo-release-1.7.1-src”压缩包包含了Dojo 1.7.1的源代码,为开发者提供了深入了解和自定义...

    dojo-0.4.2-ajax.rar

    Dojo 0.4.2还提供了`dojo.io.bind`,这是一个更为通用的Ajax函数,能够处理更复杂的请求场景,如上传文件或使用流式传输。 在Dojo中,`dojo.data`模块则用于数据存储和检索,它与Ajax结合,可以方便地从服务器获取...

    dojo-0.4.3-ajax

    "dojo-0.4.3-ajax" 是一个与Dojo Toolkit相关的版本,专注于Ajax功能的实现。Dojo Toolkit是一个开源的JavaScript库,旨在提供一套全面的工具,用于开发富互联网应用程序(RIA)。在这个特定的版本0.4.3中,重点在于...

    Dojo构建Ajax应用程序源码(包括书中用到的dojo-release-1.1.2)

    4. **Ajax通信**:Dojo的`dojo/xhr`模块提供了发送Ajax请求的方法,如`dojo/xhrGet`、`dojo/xhrPost`等,支持JSON、XML等多种数据格式。 5. **动画效果**:`dojo/fx`模块提供了丰富的动画效果,包括基本的淡入淡出...

Global site tag (gtag.js) - Google Analytics