2013-07-19 80 views
0

(不知道如果我錯過了一個已經回答了類似的問題...)AJAX/PHP - 回調之後完成加載數據

上的一個按鈕的點擊,我通過PHP/MySQL的加載從數據庫中各種圖像和附加它到身體(實際的圖像當然不存儲在數據庫中,圖像的正確選擇基於張貼的變量)。

我的目標是在所有圖像數據完全加載並顯示後,按下按鈕並隱藏指示器後顯示加載指示器。這可能是一個容易解決的回調問題,但我剛剛開始使用AJAX。 :)

以下是我目前設法提供的代碼。我猜load()函數在這裏不是真的嗎?

感謝您的幫助!

$("#somebutton").click(function(){ 
    alert("fetching…"); 
    $.post('loadmore.php', { 
     somevariable: somevariable 
    }, 
     function(data){ 
      $("body").append(data); 
      $(window).load(function(){ 
      alert("finished loading…"); 
     }); 
    }); 
}); 

回答

1

閱讀文檔http://api.jquery.com/jQuery.ajax/

使用success回調追加身體,然後completeerror回調正確清楚的事情了。

$("#somebutton").click(function(){ 
    alert("fetching…"); 

    $.post('loadmore.php', { 
     somevariable: somevariable 
    }) 
    .success(function(data){$("body").append(data)}) 
    .error(function(){alert("oh dear")}) 
    .complete(function(){alert("finished loading…")});  
}); 

記住,總是有一個後備去除裝載機 - 無非只是有一個裝載機沒有辦法從頁面中移除,並繼續使用該應用程序/網站雪上加霜。

+0

嘿,歡呼的隊友!我設法加載數據並顯示各種回調。必須將「數據」添加到函數 - 函數(數據) - 並在錯誤函數之後刪除分號。我猜這個回調會被觸發,因爲它應該是 - 只要從PHP文件接收到生成的數據(一些html標籤[img]等)。但是,這也意味着,在圖像完全呈現在頁面上之前,回調成功函數被觸發 - 當收到標籤時它會被觸發。此評論也適用於答案#2。 :) – Tobias

+0

我已經更新了我的回答與您的意見。是的,「成功」不會意識到您的圖片加載時間。也許使用'setTimeout()'來延遲刪除加載指示符?或者使用其他代碼來檢測圖像的加載。 –

+0

setTimeout()可以工作我猜,然而每次加載的圖像數量都不一樣。也許我可以將超時時間鏈接到圖像數量。你可能有什麼想法還有什麼可以檢測圖像的完成加載? 是無用的裝載機是一種痛苦。 :) – Tobias

1

您對finished loading...警報的功能是成功回調,因此一旦AJAX呼叫完成就會執行該回調。這意味着您不需要使用$(window).load

此外,您可以使用元素上的html方法更改其內容並顯示消息。

像這樣的精細工作:

$("#somebutton").click(function(){ 
    $('#divID').html('Loading...'); 
    $.post('loadmore.php', { 
     somevariable: somevariable 
    }, 
    function(data){ 
     $("body").append(data); 
     $('#divID').html(''); 
    }); 
}); 
相關問題