JP, después de verificar su solución, todavía tenía problemas en Firefox donde no precargaba las imágenes antes de continuar con la carga de la página. Descubrí esto poniendo algunos sleep(5)
en mi script del lado del servidor. Implementé la siguiente solución basada en la suya que parece resolver esto.
Básicamente agregué una devolución de llamada a su complemento de precarga de jQuery, para que se llame después de que todas las imágenes se carguen correctamente.
// Helper function, used below.
// Usage: ['img1.jpg','img2.jpg'].remove('img1.jpg');
Array.prototype.remove = function(element) {
for (var i = 0; i < this.length; i++) {
if (this[i] == element) { this.splice(i,1); }
}
};
// Usage: $(['img1.jpg','img2.jpg']).preloadImages(function(){ ... });
// Callback function gets called after all images are preloaded
$.fn.preloadImages = function(callback) {
checklist = this.toArray();
this.each(function() {
$('<img>').attr({ src: this }).load(function() {
checklist.remove($(this).attr('src'));
if (checklist.length == 0) { callback(); }
});
});
};
Por interés, en mi contexto, estoy usando esto de la siguiente manera:
$.post('/submit_stuff', { id: 123 }, function(response) {
$([response.imgsrc1, response.imgsrc2]).preloadImages(function(){
// Update page with response data
});
});
Esperemos que esto ayude a alguien que viene a esta página desde Google (como yo) buscando una solución para precargar imágenes en llamadas Ajax.
$.each(arguments,function(){(new Image).src=this});