我希望在完成操作后有一个回调函数,我正在尝试这样的事情:
$.when(
$('#detail1').load('/getInfo.php'),
$('#detail2').load('/getOther.php')
).then(function(a,b){
alert("done");
});
问题是回调函数在操作完成之前触发。
答案 0 :(得分:24)
这是因为jQuery.when()需要jQuery.Deferred实例,而load()返回一个jQuery实例(参见http://api.jquery.com/jQuery.when/和http://api.jquery.com/load/)。
您可以解决此问题:
// Create two Deferred instances that can be handed to $.when()
var d1 = new $.Deferred();
var d2 = new $.Deferred();
// Set up the chain of events...
$.when(d1, d2).then(function() {
alert('done');
});
// And finally: Make the actual ajax calls:
$('#detail1').load('/getInfo.php', function() { d1.resolve(); });
$('#detail2').load('/getOther.php', function() { d2.resolve(); });
答案 1 :(得分:8)
我做了类似的代码,但是以更动态的方式处理图像。希望它有所帮助。
var deferreds = [];
// Create a deferred for all images
$('.my-img-class').each(function() {
deferreds.push(new $.Deferred());
});
var i = 0;
// When image is loaded, resolve the next deferred
$('.my-img-class').load(function() {
deferreds[i].resolve();
i++;
});
// When all deferreds are done (all images loaded) do some stuff
$.when.apply(null, deferreds).done(function() {
// Do some stuff
});