不确定这是否可行或如何进行。我在$ .ajax响应中使用以下代码,它完全正常,但是,我需要在循环完成迭代后调用函数loadSlider();
。
if (response.success)
{
$.each( response.screenshots, function( index, value ) {
//add the slide
$( '#slider1' ).prepend( '<li data-id="'+value.screenshot_id+'"><img src="/showimage.php?show='+value.image_filename+'" alt=""></li>' );
//add the pager
$( '#rslides-pager' ).prepend( '<li><a href="javascript:;"># here</a></li>' );
});
//want to call loadSlider(); AFTER everything above is completed
}
答案 0 :(得分:27)
$.each()
会同步遍历数组,因此您只需在$.each();
调用后运行代码即可。
if (response.success) {
$.each( response.screenshots, function( index, value ) {
// do stuff
});
loadSlider();
}
正如您提到的AJAX:只有实际的成功回调(即最有可能包含您发布的代码的函数)才会异步执行。该函数内的任何代码都是同步运行的(除非你在那里调用另一个异步函数)。
答案 1 :(得分:-1)
您可以在最后一次迭代中启动滑块,这很简单:
if(response.success)
{
var count = response.screenshots.length;
$.each(response.screenshots, function (index, value) {
//add the slide
$('#slider1').prepend('<li data-id="' + value.screenshot_id + '"><img src="/showimage.php?show=' + value.image_filename + '" alt=""></li>');
//add the pager
$('#rslides-pager').prepend('<li><a href="javascript:;"># here</a></li>');
if (!--count) {
//want to call loadslider(); after everything above is completed
loadslider();
}
});
}
答案 2 :(得分:-1)
jquery有一个jQuery.when(),它提供了一种基于零个或多个对象执行回调函数的方法,通常是表示异步事件的Deferred对象。
现在在您的代码中可能:
if (response.success) {
var iterate = $.each( response.screenshots, function( index, value ) {
// do stuff
});
$.when(iterate)
.then( loadSlider, myFailure );
}
第一个函数是成功回调,另一个函数是失败回调。
答案 3 :(得分:-2)
$.each( response.screenshots, function( index, value ) {
}).promise().done(function () {
//Completed
});
示例:
if (response.success)
{
$.each( response.screenshots, function( index, value ) {
//add the slide
$( '#slider1' ).prepend( '<li data-id="'+value.screenshot_id+'"><img src="/showimage.php?show='+value.image_filename+'" alt=""></li>' );
//add the pager
$( '#rslides-pager' ).prepend( '<li><a href="javascript:;"># here</a></li>' );
}).promise().done(function () {
//Completed
});
}