1. dojo 异步调用: dojo.xhrGet
function helloWorld(){
dojo.xhrGet({
url: "helloworld.txt" ,
handleAs: "text",
load: function(response, ioArgs){alert(response);},
error: function(error, ioArgs){alert(error.message);}
});
}
url:请求的服务器资源 url,url 标识的只能是文本文件,而不能是二进制文件。
(获取服务器上与引用此 Javascript 脚本的页面同一目录下的 helloworld.txt 文件)
handleAs:返回的数据类型,可以是 text(默认)、json、json-comment-optional, json-comment-filtered、javascript、xml 。
Dojo 将根据 handleAs 设置的数据类型对从服务器返回的数据进行预处理,再传给 load 属性指向的回调函数。
load:它的值是一个函数,这个函数在请求的资源成功返回之后被调用,实际上就是一回调函数。
error:它的值也是一个回调函数,但是只在 http 请求出错之后(比如,404 错误:请求的资源找不到)才被调用。
回调函数的参数:
response:表示从服务器端返回的数据,Dojo 已经根据 handleAs 设置的数据类型进行了预处理。
ioArgs: 这是一个对象,包含调
- ioArgs.url
:请求的 URL,与调用 xhrGet 时设置的值一样。 - ioArgs.que
ry:请求中包含的参 数, URL 中“ ? ”后面的内容。 - ioArgs.han
dAs:如何对返回的 数据进行预处理,与调 用 xhrGet 时设置的值一样。
- ioArgs.xhr
: xhrGet 函数使用的 XHR 对象。
handleAs:预处理方式
text ->默认值,不对返回的数据做任何处理
xml ->返回 XHR 对象的 responseXML
javascript ->使用 dojo.eval 处理返回的数据,返回处理结果
json ->使用 dojo.fromJSon 来处理返回的数据,返回生成的 Json 对象
json-comment-optional ->如果有数据包含在注释符中,则只使用 dojo.fromJSon 处理这部分数据,如果没有数据包含在注释符中,
则使用 dojo.fromJSon 处理全部数据。
json-comment-filtered ->数据应该包含在 /* … */ 中,返回使用 dojo.fromJSon 生成的 Json 对象,如果数据不是包含在注释符中则不处理。
2.xhrGet : 提交表单
function submitForm(){
dojo.xhrGet({
form: "loginForm" ,
handleAs: "text" ,
handle: handler,
content: { pwd: "modified" },
sync: false
});
return false;
}
form:需要异步提交的表单的 id 。只有把它设置成想要异步提交的表单的 id,并在这个表单的 onsubmit 事件中调用自定义的 submitForm() 函数,才能真正做到异步提交。注意在 submitForm 函数中最后返回了 false,这是为了阻止系统默认的表单提交事件,让表单提交异步进行,如果不返回 false,会引起页面跳转。
handle:handle 也是一个回调函数,在 xhrGet 返回时被调用,正常和错误返回的情况都能处理,可以说是 load 和 error 的混合体,但优先级比 load 低,只有在没有设置 load 时才起作用。
content:在这里可以修改来自表单的信息,在清单 6 所示的例子中,就使用这一属性修改了用户登录时输入的密码。
sync:设置同步还是异步提交。默认是异步提交,所以在清单 6 以前的例子中并没有设置这一属性。
需要注意的是:虽然表单提交的默认方法是 POST,但当使用 xhrGet 提交时,表单提交方式就自动改为 GET,所有表单的数据都会变成查询字符串出现在 URL 中。所以在服务器端只能从查询字符串中取得这些提交的信息。在 jsp 中是:request.getQueryString(“PWD”),而在 php 中可以使用 $_GET[“PWD”] 在服务器端获取表单字段。