我打算打電話給ajax功能,並正在通過api查看。我很好奇,如果有一個功能可以在等待成功,錯誤,完成等被調用的時候執行。是否有jquery ajax函數在等待錯誤,成功或完成時調用?
我希望有這樣的:
$阿賈克斯({ ..., 等待:函數(){// 執行一些代碼 } });
如果它不在那裏,它確實應該。它不是在我的腦海智能不得不隨身攜帶的東西被稱爲AJAX功能之前...
等待可以很容易地進行一些諸如顯示加載GIF或類似的東西。
有沒有什麼做這種功能?我似乎無法找到它。
我打算打電話給ajax功能,並正在通過api查看。我很好奇,如果有一個功能可以在等待成功,錯誤,完成等被調用的時候執行。是否有jquery ajax函數在等待錯誤,成功或完成時調用?
我希望有這樣的:
$阿賈克斯({ ..., 等待:函數(){// 執行一些代碼 } });
如果它不在那裏,它確實應該。它不是在我的腦海智能不得不隨身攜帶的東西被稱爲AJAX功能之前...
等待可以很容易地進行一些諸如顯示加載GIF或類似的東西。
有沒有什麼做這種功能?我似乎無法找到它。
試試這個
jQuery.ajax({
url:"http://www.example.com/",
beforeSend:function(){
//show loading gif
},
success:function(resp){
//handle response from server
//hide or remove loading gif
},
error:function(msg){
//show error message
}
});
您應該在啓動請求的同時顯示加載GIF。除了readyState
之外,沒有真正的方法可以知道AJAX調用的實際進度,這就是onreadystatechange
的用途(在普通的JS中,我不知道/關心它在jQuery中的等價物是什麼)。
beforeSend:創建一個微調器,然後在Done()它會隱藏微調器,或任何函數beforeSend調用? – Fallenreaper
我想你可以這樣做,但爲什麼不把代碼添加到ajax函數調用後立即微調? –
因爲它不是混在一起,所以有一個想法是它將完成不同的任務。這就是說,把它放在beforeSend有一個關於微調器的ajax調用,而不是一個函數在ajax請求 – Fallenreaper
這很容易,直到Ajax調用完成後顯示的好手。下面是它如何工作的一個示例:
loading = {
count: 0
};
loading.finish = function() {
this.count--;
if (this.count==0) this.$div.hide();
};
//
loading.start = function() {
this.count++;
if (!this.$div) {
var html = '<div style="position: fixed;z-index:100;left:0;top:0;right:0;bottom:0;background: black;opacity: 0.6;">';
html += '<table width=100% height=100%>';
html += '<tr><td align=center valign=middle>';
html += '<img src=img/loading.gif>';
html += '</td></tr>';
html += '</table></div>';
this.$div=$(html);
this.$div.prependTo('body');
}
setTimeout(function(){
if (loading.count>0) loading.$div.show();
}, 500);
};
// the function to call
askUrl = function(url, success) {
var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
success(msg);
}
loading.finish();
}
};
loading.start();
httpRequest.open('GET', url);
httpRequest.send();
};
如果調用askUrl和服務器不會在500毫秒回答,屏幕上會顯示爲灰色,並顯示一個微調。
由於這是一個簡短的代碼,它實際上取決於所期望的結果,我不知道這應該在jQuery的,甚至插件可用。
我得到了我的gif微調here。
,你有你的後電話$.ajax
實際上將開始啓動呼叫後立即運行任何代碼。所以,如果你有這樣的事情:
$ajax('someurl').done(function() { /*** success function ***/ });
someOtherFunctionCall();
someOtherFunctoinCall()
實際上將立即Ajax調用開始後執行,並不管呼叫的成功/失敗的發生。
這個缺點之後被解僱,這是因爲雖然它在這裏看起來不錯,但是你不需要看到ajax調用和someOtherFunctionCall();這正是我想要的 – Fallenreaper
最好的辦法是使用beforeSend和功能齊全的Ajax請求..
$.ajax({
.. Your ajax settings..
success : function(result){
// do what you want with data here
},
beforeSend : function(){
// Show a ajax gif here
},
complete : function(){
// Hide the ajax gif here
}
});
的beforeSend功能就被作爲Ajax請求打發送.. 完整的功能被觸發時,它是從成功的功能.. 所以你可以通知用戶的,當請求完成..
等待函數和ajax調用之後調用的函數之間會有什麼區別? – yoshi
除了yoshi的評論之外,我通常會說我通常會在**調用之前放置這種命令**,所以在等待命令和回調命令之間沒有競爭條件。最顯而易見的例子是'loading ...'消息顯示並隱藏在ajax調用結束時。 – Pandaiolo
是的,所以提供了不同的答案,我認爲beforeSend函數是實現它的最好方法。這樣,在一個微調器的例子中,你可以在調用之前啓動它,然後使用.done()命令將它淡出。 – Fallenreaper