0

大家好,我有以下代码

$.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 表示是。在我的萤火虫控制台中,当函数启动时,while 循环仍在执行,但警报已显示值 0。因此,滚动未完成。

如果我在执行后立即再次启动该函数,我会得到一个 1,这意味着 div 已加载。

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

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

4

1 回答 1

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 中有效,如果这值得关注的话。

于 2012-06-12T19:41:54.710 回答