2017-03-09 79 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>