循环中有多个ajax内容请求

时间:2009-11-07 17:39:24

标签: javascript jquery ajax while-loop

我正在尝试将一些ajax内容加载到表中,遗憾的是它只是多次加载最后一行而不是加载每个新行。

这是我正在使用的代码:

function periodicRefresh()
{
    $.ajax({
        type: 'GET',
        url: 'include/ajaxActions.php',
        data: "action=displayLastEvent",

        success: function(msg){
            var newid = msg;
            current = $("#list tr:first").get(0).id;
            if(newid != current){
                while (current<newid)
                {
                    current++;
                    addToList(current);
                }   
            }
        }
    });                 
}

function addToList(x)
{
     $.ajax({
            type: 'GET',
            url: 'include/ajaxActions.php',
            data: "action=displayRow&row="+x,

            success: function(msg){
                $("#list").prepend(msg);
                $("#list tr:first").highlightFade({
                    speed:3000
                });
                lastrow = x-20;
                $('#'+lastrow).remove();
            }
     });

}

displayLastEvent返回最后一行的ID。

displayRow返回最后一行

3 个答案:

答案 0 :(得分:1)

您需要将xmlHttps推送到数组或抽象数据类型,然后可以附加事件处理程序。似乎jquery不会为你做那件事。

答案 1 :(得分:1)

我会通过鼓励你改变你的方法来解决这个问题,因为当你需要在列表中添加更多行(2+而不是2)时,你可能会发出超过必要的AJAX请求。

我会更新include/ajaxActions.php?action=displayRow接受一个id of CSV(或者你传入的任何内容),然后返回一组行数据,而不是只返回一行的数据。

答案 2 :(得分:0)

我认为:

current = $("#list tr:first").get(0).id;

始终返回与jQuery相同的结果,只记住第一次加载时的页面 例如,如果您有一个tr[id=0]

pass 1 : current = 0; msg = 1 -> 1 tr prepended with id = 1;
pass 2 : current is always 0 (not 1); msg = 1 -> 1 tr prepended with id = 1;
...

你应该做的是,在添加邮件后让jQuery识别你的页面结构,或者以不同的方式存储最后一个索引:例如:hidden input

HTML:

<input type="hidden" value="0" id="lastId"/>

脚本:

页面加载时

初始化#lastId value

$(document).ready(function(){
    $("#lastId").val(0);//or by using your displayLastEvent action
});

修改periodicRefresh以阅读#lastId value

function periodicRefresh()
{
    $.ajax({
        type: 'GET',
        url: 'include/ajaxActions.php',
        data: "action=displayLastEvent",

        success: function(msg){
                var newid = msg;
                var current = $("#lastId").val();
                if(current<newid) $("#lastId").val(newid);
            if(newid != current){
                while (current<newid)
                {
                        current++;
                        addToList(current);
                }       
            }
        }
    });                     
}