2017-03-09 95 views
0

我想通過AJAX調用加載一些內容,並在加載內容後執行另一個操作。在我的例子中,後一個動作只是一個警告,但在我嘗試着重於輸入字段的現實世界示例中。jQuery .load()回調

$("#box").load("/favicon.png", function(response) { 
    alert('do after the load'); 
}); 

https://jsfiddle.net/u0cmmn5h/

正如你可以在小提琴看到,火災警報的圖標之前實際加載。內容加載後,該功能是否應該觸發?

+0

'alerts'和類似的操作系統彈出窗口是糟糕的設計,因爲侵入和阻塞,頁面代碼執行不會繼續,除非執行特定的用戶操作。儘可能使用一些定製解決方案。所以在你的情況下,你最好使用'console.log('加載後');'爲了測試的目的。 –

+0

您可以在[Promises](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise)或[jQuery的等效Deferred對象](https://api.jquery)中封裝函數.com/jQuery.Deferred /),因此可以使用'.then(function(){})'和其他鏈接。當JavaScript代碼解析時,Promise會解決,這可能不是圖像在屏幕上顯示的確切時間。 –

回答

2

上​​回調時執行的HTTP響應,而不是當該圖像被呈現客戶端。

+0

明白了。我想我應該在這裏使用$ .ajax()。如果將其切換到$ .ajax()並將該事件(在本例中爲alert)作爲ajax()請求的成功執行,我是否還需要實現promise? –

+0

更新了小提琴來說明我的問題:https://jsfiddle.net/u0cmmn5h/2/ –

0

以下是在圖像上使用load的示例。不知道你在一個div上有什麼load

當圖像src屬性發生更改並且圖像成功加載(注意,如果它失敗,則不會執行),將會觸發load方法。

.load() jQuery

負載事件被髮送到一個元件時,它和所有的子元件已經完全加載。這個事件可以發送到與URL相關的任何元素:圖像,腳本,框架,iframe和窗口對象。

$(function() { 
 
\t $('img').load(function() { 
 
    \t alert('done after load'); 
 
    }).attr('src', '/favicon.ico'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div id="box"> 
 
    <img /> 
 
</div>