2013-05-30 128 views
0

我加載圖片的網址內容供的getJSON一個div AJAX完成,當它完成它會改變一個變量,所以我知道AJAX做如何jQuery函數知道

如何等功能知道Ajax是做什麼?這是我想要的:

用戶導航到相冊的div,然後它會檢查AJAX是否完成。如果沒有完成AJAX,會顯示一個加載圖像,但是當AJAX完成時,如何知道AJAX已完成以停止顯示加載圖像?

我的想法:

1 /使用while循環將凍結一切,其實並不連續工作檢查AJAX狀態變量。

2 /我不能把所有的導航代碼放在回調函數中,因爲我希望用戶在AJAX加載時可以自由地進行操作。把它全部放在回調函數中會產生一團亂碼

這個問題怎麼解決?

回答

3

你不應該「檢查」 AJAX是否通過輪詢完成一個變量,要註冊一個回調,這將是自動當它完成,最好使用調用jQuery的"deferred objects",例如

$.getJSON(...).done(function(data) { 
    // my ajax is finished! 
}); 

最終你不必把所有的代碼回調,但你必須確保它結束了由回調稱爲

+0

我仍然無法得到的想法。正如我已經說過的,如果我將導航代碼放在回調函數中,那麼它將凍結,直到那個。我需要的是導航代碼的方法來了解AJAX是否已完成 – user2174870

+0

@ user2174870除非您在其他地方使用「繁忙循環」,否則不應使用此代碼「凍結」。你的導航代碼不應該運行_continuously_JS代碼應該只運行在某種事件的響應,然後只是簡單地運行。然後瀏覽器將閒置,直到收到下一個事件。 – Alnitak

+0

@ user2174870 p.s.你在問題中說:「不斷檢查狀態......會凍結一切」 - 這是正確的。使用回調函數是_prevent_ freeze的方法,但這只是正確構造代碼的一種情況,以免「創建一堆代碼」。使用延遲對象可以顯着改善異步代碼,因爲它有助於消除深層嵌套。 – Alnitak

1

您可以使用全局AJAX:{對於要求您不必表現出任何加載圖片,可以使用選項global:false}在

$(document).on('ajaxStart',function(event, jqxhr, settings){ 
    //show loading img 
}) 
.on('ajaxComplete',function(event, jqxhr, settings){ 
    //hide loading img 
}) 
+0

@downvoter,請告訴我更多 –

2

ajax調用有一個名爲「success:function(data)」的擴展,數據包含從請求中獲得的任何內容。

$.ajax({ 
    type: "POST", 
    dataType="json", 
    url:url, 
    data:{id:x}, 
    success : function(result){ 
    //stop loading message here 
    } 
0
$.ajax({ 
    type: "POST", 
    dataType : "json", 
    ... 
}).done(function(data) { 
// Stuff you want to do after ajax complete 
}); 

OR

$(document).ajaxComplete(function() { 
    // Ajax Completed 
});