2013-07-18 64 views
0

有沒有方法可以確定.post請求是否已啓動並完成。如何確定`.post`請求是否已經開始並在jquery中完成

我的意思是,如果我有一個代碼:

$.post('address.php', { value: value }, function(data) { 
    alert(data);  
}); 

我怎麼能知道它開始爲我顯示加載圖像和說.post請求完成後隱藏加載圖像。

我知道如何做到這一點有一種方法,因爲大多數網站都使用這種算法。我想寫在jQuery

任何輸入?

+5

http://api.jquery.com/category/ajax/global-ajax-event-handlers/ – Archer

+0

你真的不需要JQuery。你可以做的是當按鈕被點擊使用JS顯示一個加載圖像,你需要它,一旦成功,只需刪除圖像。希望我清楚。 – ArunM

+0

@ArunM它包含了大量的信息,我想我必須花一秒鐘才能知道所有功能正在發生什麼。 – HTTP

回答

0

該請求立即啓動,因此您可以在致電$.post()之前顯示加載程序。

調用$.post()將返回promise,所以你可以做這樣的事情:

// Show your loader 
$("#myloader").show() 

$.post('address.php', { value: value }, function(data) { 
    alert(data); 
}) 
.always(function() { 
    // Hide it again when the request is complete 
    $("#myloader").hide(); 
}); 

這是$.post() jQuery的API文檔中記錄。

1

AJAX請求總是立即啓動,因此只有在完成時才需要知道。在發送請求之前,您的加載器可以正確顯示。

如果您需要知道它是成功還是失敗,則更好的方法之一是以下幾點。

// Show your loader image 
$("#loader").show(); 

$.post("address.php", { 
    value: value 
}).done(function() { 
    // Only on success (HTTP status code < 400) 
    alert("Success!"); 
}).fail(function() { 
    // Only on errors (HTTP status code >= 400) 
    alert("Error :("); 
}).always(function() { 
    // Hide your loader image. 
    // Will always happen, after .done()/.fail() were fired. 
    $("#loader").hide(); 
}); 
0

如果使用$阿賈克斯,而不是$。員額($。員額只是一個簡寫的Ajax功能反正),你可以使用beforeSendcomplete回調(或成功回調 - 但如果有錯誤這個回調可能不執行)包含顯示和隱藏您的加載圖標中的AJAX調用自身的邏輯,這方面的一個例子是:

$.ajax({ 
    type: 'POST', 
    data: { value : value }, 
    url : 'address.php', 
    beforeSend : function() { 
     $("#myloader").show(); 
    }, 
    complete : function() { 
     $("#myloader").hide(); 
    }, 
    success : function(data) { 
     console.log('success'); 
    } 
}); 

這裏是鏈接到了jQuery的阿賈克斯節文檔,以便您可以詳細瞭解回調和其他可用選項。 http://api.jquery.com/jQuery.ajax/

相關問題