gpt4 book ai didi

jQuery Ajax 等待所有图像加载完毕

转载 作者:行者123 更新时间:2023-12-03 21:29:21 24 4
gpt4 key购买 nike

我正在尝试使用 jQuery 执行 Ajax 调用,该调用运行良好。我使用成功事件来显示数据。然而,一旦加载外部 HTML 文件,似乎就会触发成功。如果有大图像,它们在显示后会继续加载。有没有办法在全部加载完毕后显示内容?这是代码:

$('#divajax').html('<br><div style="text-align: center;"><img src="res/ajax-loader.gif"></div>');
$.ajax({
cache: false,
url: 'ajax/content.php',
success: function(data) {
$('#divajax').html(data);
}
});

最佳答案

由于某种原因,@alex 编写的插件对我不起作用......我不明白为什么。但他的代码确实激发了我想出一个更适合我的轻量级解决方案。它使用 jquery promise 。请注意,与 @alex 的插件不同,它不会尝试考虑元素上的背景图像,而仅考虑 img 元素。

// Fn to allow an event to fire after all images are loaded
$.fn.imagesLoaded = function () {

// get all the images (excluding those with no src attribute)
var $imgs = this.find('img[src!=""]');
// if there's no images, just return an already resolved promise
if (!$imgs.length) {return $.Deferred().resolve().promise();}

// for each image, add a deferred object to the array which resolves when the image is loaded (or if loading fails)
var dfds = [];
$imgs.each(function(){

var dfd = $.Deferred();
dfds.push(dfd);
var img = new Image();
img.onload = function(){dfd.resolve();}
img.onerror = function(){dfd.resolve();}
img.src = this.src;

});

// return a master promise object which will resolve when all the deferred objects have resolved
// IE - when all the images are loaded
return $.when.apply($,dfds);

}

然后你可以像这样使用它:

$.ajax({
cache: false,
url: 'ajax/content.php',
success: function(data) {
$('#divajax').html(data).imagesLoaded().then(function(){
// do stuff after images are loaded here
});
}
});

希望这对某人有帮助。

请注意,使用上述代码时,如果其中一张图像出现错误(例如,因为 URL 错误),则无论如何都会解决 Promise 并忽略该错误。这可能是您想要的,但是,根据您的情况,如果图像加载失败,您可能想中止正在执行的任何操作。在这种情况下,您可以按如下方式替换 onerror 行:

img.onerror = function(){dfd.reject();}

并捕获这样的错误:

$('#divajax').html(data).imagesLoaded().done(function(){
// do stuff after all images are loaded successfully here
}).fail(function(){
// do stuff if any one of the images fails to load
});

关于jQuery Ajax 等待所有图像加载完毕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4774746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com