jquery Ajax
$ajax({
Url:”test.html”,-----发送请求的地址
Async:true;------异步操作
Cache:true,-----可以从缓冲中加载
Type:”GET”,------请求方法
Datatype:”json”,-------服务器返回数据类型
Sucess:function(data){ ----------调用成功语句
If(data==”OK”){
Console.log(data);
}
},
error:function(data){-----------------------(error:function(XMLHttpRequest, textStatus)失败语句
If(data==”OK”){
Console.log(data);
}
},
complete:function(data){--------------结束语句
If(data==”OK”){
Console.log(data);
}
},
})
$.get(
Url:”test.html”,{name:”xsx”,age:”19”},function(data){
Console.log(data);
})
$.post(
Url:”rest.xml”,{uname:”xsx”,age:”20”},function(data){
If(data==”OK”){
Console.log(data);
}
})
Jquery Deferred(jquery promis)
$.Deferred()返回一个对象,我们可以称之为Deferred对象,上面挂着一些熟悉的方法如:done、fail、then等。jquery就是用这个Deferred对象来注册异步操作的回调函数,修改并传递异步操作的状态。
有一个弊端,因为执行runAsync()可以拿到def对象,而def对象上又有resol方法,可以在外部进行修改,回调函数会停止。
jquery提供了一个promise方法,就在def对象上,他可以返回一个受限的Deferred对象,所谓受限就是没有resolve、reject等方法,无法从外部来改变他的状态
Function run(){
Var def=$.Deferred();
setTimeout(function(){
Console.log(“执行完成”);
def.resolve=”随便什么都行”;
},2000);
Return def.promise();
}
run.done(function(){
console.log(“执行成功”)
})
.fail(function(){
Console.log(“函数失败”);
})
$when方法
jquery中,还有一个$.when方法来实现Promise,与ES6中的all方法功能一样,并行执行异步操作,在所有的异步操作执行完后才执行回调函数。不过$.when并没有定义在$.Deferred中,看名字就知道,$.when,它是一个单独的方法。与ES6的all的参数稍有区别,它接受的并不是数组,而是多个Deferred对象
$.when(runAsync(), runAsync2(), runAsync3())
.then(function(data1, data2, data3){
console.log('全部执行完成');
console.log(data1, data2, data3);
});
总结一下就是:$.Deferred实现了Promise规范,then、done、fail、always是Deferred对象的方法。$.when是一个全局的方法,用来并行运行多个异步任务,与ES6的all是一个功能。ajax返回一个Deferred对象,success、error、complete是ajax提供的语法糖,功能与Deferred对象的done、fail、always一致。就酱。
参考网址:http://www.cnblogs.com/lvdabao/p/jquery-deferred.html
http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html