.each()完成后回调函数?

时间:2014-05-23 06:48:42

标签: jquery each

不确定这是否可行或如何进行。我在$ .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                        
}

4 个答案:

答案 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对象。

jquery $.when reference

现在在您的代码中可能:

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
        });


}