首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

dojo1.7通译 ajax功能(Ajax with Dojo)

2012-08-30 
dojo1.7翻译ajax功能(Ajax with Dojo)原文地址:http://dojotoolkit.org/documentation/tutorials/1.7/ajax

dojo1.7翻译 ajax功能(Ajax with Dojo)

原文地址:http://dojotoolkit.org/documentation/tutorials/1.7/ajax/

?

Ajax是一个动态网站的基本功能,在这个教程中,你将会学到如何使用dojo的ajax使用方法,包括了基本的XHR连接,自定义回调函数,处理多类型数据和使用json跨域取值。

?

开始

由于在dojo,dijit,dojox的多个组件和类中都要用到ajax功能,所以dojo就把ajax方法放到了dojo base类中。但是在操作使用ajax时他的依赖类还是要被指定的。ajax工具类被放置于dojo/_base/xhr这个模块中。下面是示例

?

?上面的例子演示的是以ajax方式从get-message.php地址中请求数据,如果取值成功将会把返回的信息alert出来。如果取值出问题会怎么样?又或者返回的数据是json或xml格式的我们可以怎么处理?还有,我想要提交一个form的数据将怎么办?xhr都可以完全的处理这样问题。

?

定制ajax请求

一个web的开发者要能够使用ajax功能来实现不同的请求任务,要能完成以下功能,但不是只限于这些功能

?

从服务器中取得静态数据能处理从服务器中传来的XML或JSON格式的数据能发送数据到服务器能对页面进行局部刷新xhr就可以完成以上的功能。xhr有xhr.get和xhr.post两种方式。我们来看看这两种方法的一些参数。url要请求的路径handleAs字符串类型,指要以什么样的格式来处理返回的数据,有"text","json","javascript","xml",默认为"text",如果是"javascript"片断的话会在返回后执行它timeout超时时间,以毫秒记,如果超时会触发error方法content以键值对的形式表现的参数,也就是请求参数form一个有同的参数,通过我们都是使用form来提交的,如果你没有使用url而指定的form,那么将会请求form中的action值,同样,如果你使用了content,那么将会不覆盖form中的参数,所有content/form两者选一个,不要同时使用上面的参数是来配置怎么发送,对于返回数据的处理有三种方法。load(response,ioArgs)当请求成功返回值时会调用这个方法。第一个参数是返回值error(errorMessage)当请求失败时会调用该方法,第一个参数是错误信息handle(response,ioArgs)不管是成功还是失败都会调用该方法,load或error先调用,然后再调用该方法示例

刷新节点内容

?

?

?

?运行示例

?

JSON已经被使用了很多年了,而且大多数的服务端语言都支持对json的加密解密。如php就使用json_encode 和 json_decode方法来处理json数据

?

JSONP和dojo/io/script

对于基本的ajax功能有一个限制,你不能进行跨域请求。比如你不能在你的服务器中使用xhr.get来请求我的服务器地址。但有另一个方法,你可以使用JSONP。其工作方式为

?

创建一个script节点设置script节点的src属性为你要请求的地址,在地址中加入请求参数,还有再加上回调函数名script节点会被加载在DOM中,将触发浏览器的一个局部请求服务器返回JSON数据,并按约定包装了回调函数浏览器执行返回的数据,并调用回调函数使用JSONP的方法在dojo/io/script模块中,这个模块中的get方法和xhr.get方法有着类似的参数属性,只是多了一个callbackParamName的属性,这个属性将执行回调函数,这个回调函数不是你创建的,而是服务器包装的,所以,你要去查看提供这种服务的说明文档。下面就是从Twitter取值的一个片断
?注意:在以上代码中,我们自己并没有创建名叫callback的方法。所以我们可以很容易的使用JSONP来使用ajax跨域取取值但我们一定要记住。服务提供者一定要支持JSONP的API,并不是我们在所有的服务器中都能使用dojo/io/script的
最佳实践

?

get方法是用于从服务器简单取值的方法,post是用户发送表单数据或大量数据到服务器的方法建议使用error的回调函数,不要期望你的ajax请求是肯定成功的在发送和接收数据的过程中使用console打印到控制台来确保你的数据都是正确的根据经验,在ajax请求中要给用户一点提示,如一个在加载的图标等结论

dojo减少了跨域请求的大量的工作量,并且通过dojo/_base/xhr提供了非常简单的API。同时也通过dojo/oi/script提供了跨域方法xhr.get和xhr.post

?

?

热点排行