延迟入门
dojo.Deferred
如下主题:
1、定义
2、状态和触发
3、ajax
4、链式调用
5、合并调用
var def = new dojo.Deferred()
def.then(function(res){ ... },function(err){...});
如果两个回调函数时,第二个是错误时执行。
状态有三种:
1)unresolved 未处理,对象定义后的默认状态
2)resolved 已处理,执行def.resolve()后的状态,调用第一个回调函数;
2)rejected 驳回,执行def.rejected()后的状态,调用第二个回调函数;
dojo在Ajax函数中使用到延迟,调用dojo.xhrGet或dojo.xhrPost时,返回延迟对象。
比如下面代码
dojo.xhrGet({
url:"...",
load:function(content){...}
})
可以写成:
var def = dojo.xhrGet({url:"..."});
def.then(function(content){...});
也可直接写成
dojo.xhrGet(url:"...").then(function(content){...});
还有另一种情况:异步发送两次请求, 返回后在一个回调函数中处理。即延迟列表(DeferredList)
var def1 = dojo.xhrGet({url:"..."});
var def2 = dojo.xhrGet({url:"..."});
var defs = dojo.DeferredList([def1,def2]);
defs.then(function(results){
var result1 = results[0][1];
var result2 = results[1][1];
...
})
主题:
1、常用写法,dojo.xhrGet,dojo.xhrPost
2、事件(load,error,handle)
3、传输参数 (url,content,form)
4、跨域访问 (JSONP、dojo.io.script)
常用写法:
Get 示例:
});
事件有
1、载入成功时调用:load
2、载入失败时调用:error
3、最后都会调用:handle
传输参数值的几种做法:
1、直接放到URL
2、使用content参数(json对象)
3、使用form参数(相当于提交表单)
跨域访问:
dojo.require("dojo.io.script");
dojo.io.script.get({
url:"http://...",
callbackParamName:"callback",
content:{...},
load:function(){...}
})
还有其他方法:xhrPut 和 xhrDelete ,对应用于REST开发中。

