在AJAX成功函数中延迟while循环

时间:2012-06-12 19:38:06

标签: javascript jquery

大家好我有以下代码

$.ajax({
url: "http://localhost/twee/chat/getnumcom",
type: 'POST',
data: form_data,
success: function(html) {
            var data = parseInt(html);
                page = 20 * data ;

                while ( counter < page ) {

                       $.get("http://localhost/twee/chat/"+id+"/"+counter,function(data){
                       $('#c').append($(data).find('#c').html());
                       });      
                  counter = counter + 20 ;
               } 
          }
});

alert($('#600').length);
$.scrollTo('#600');

这就是它的作用。最初它将数据附加到我的窗口,直到找到#600。从技术上讲,我有一个数学计算600应该在哪里的函数。这很好,div很好地加载。

我是如何添加警报专门检查div是否已加载。值0表示否,值1表示是。在我的firebug控制台中,当函数被触发时,while循环仍然在执行,但警报已经显示值0.因此,滚动没有完成。

如果我在执行后立即再次启动该功能,我得到1表示已加载div。

有没有办法延迟滚动功能,直到执行while循环?我一直认为代码将在程序上执行,并且在加载所有数据后将显示警报。

我想计时器可能是一个选项,但我不想使用它。我不确定我应该将计时器设置为多少毫秒。

1 个答案:

答案 0 :(得分:1)

Ajax调用是异步的,在scrollTo循环之后将alert / success置于while回调函数中:

$.ajax({
    url: "http://localhost/twee/chat/getnumcom",
    type: 'POST',
    data: form_data,
    success: function (html) {
        var data = parseInt(html);
        page = 20 * data;

        while (counter < page) {
            $.get("http://localhost/twee/chat/" + id + "/" + counter, function (data) {
                $('#c').append($(data).find('#c').html());
                if ($('#600').length)   //if there's a #600 element inside this $.get callback
                    $.scrollTo('#600'); //scrolls to it
            });
            counter = counter + 20;
        }
    }
});

请注意,数字ID仅在HTML5中有效,如果需要关注的话。