web面试常见问题补充
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
轉載于:https://www.cnblogs.com/xieshuxin/p/6705715.html
總結
以上是生活随笔為你收集整理的web面试常见问题补充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj1705[Usaco2007 N
- 下一篇: bootstrap table 的简单D