日期:2014-05-16  浏览次数:20790 次

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这个模块中。下面是示例

?

// Require the xhr module
require(["dojo/_base/xhr"],
    function(xhr) {
         
        // Execute a HTTP GET request
        xhr.get({
            // The URL to request
            url: "get-message.php",
            // The method that handles the request's successful result
            // Handle the response any way you'd like!
            load: function(result) {
                alert("The message is: " + result);
            }
        });
         
});

?上面的例子演示的是以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先调用,然后再调用该方法

示例

刷新节点内容

?

?

require(["dojo/_base/xhr", "dojo/dom", "dojo/domReady!"],
    function(xhr, dom) {
         
        // Using xhr.get, as very little information is being sent
        xhr.get({
            // The URL of the request
            url: "get-content.php",
            // The success callback with result from server
            load: function(newContent) {
                dom.byId("contentNode").innerHTML = newContent;
            },
            // The error handler
            error: function() {
                // Do nothing -- keep old content there
            }
        });
         
});

?

运行示例

?

检查用户名是否可用

?

// Local var representing the node to be updated
var availabilityNode = dom.byId("availabilityNode");
 
// Using xhr, as very little information is being sent
xhr.get({
    // The URL of the request
    url: "check-username.php",
    // Allow only 2 seconds for username check
    timeout: 2000,
    // Send the username to check base on an INPUT node's value
    content: {
        username: dom.byId("usernameInput").value.toLowerCase()
    },
    // The success callback with result from server
    load: function(result) {
        if(result == "available") {
            availabilityNode.innerHTML = "Username available!";
        }
        else {
            availabilityNode.innerHTML = "Username taken!  Please try another.";
        }
    }
});

?

?运行示例

?

form提交

?

// Local var representing if the form has been sent at all
var hasBeenSent = false;
 
// Local var representing node