令人困惑的javascript setinterval,循环和jquery ajax加载优先级

时间:2013-02-23 13:15:12

标签: javascript arrays jquery

直截了当 我有以下javascript和jquery代码更新一些已检查的行并在每个数据表行上执行一些操作。这是我的代码:

function checkUpdate(){
setInterval(function(){
    var listLength = updateList.length;
    if(listLength > 0){
        for(var r=0; r<listLength; r++){
        //  console.log(r)
            var clID = updateList[r];
        //  console.log(clID)
            var rRow = $('#dataTable tbody tr').find('td[data-clientid="'+clID+'"]').parent('tr');
        //  console.log(rRow)
            var rRowIndex = rRow.index();
        //  console.log(rRowIndex)
            var rRowDataIndex = oTable.fnGetPosition(rRow[0]);
            console.log(rRowDataIndex)
            $.ajax({
                url: '/cgi-bin/if-Clients-list.jpl',
                data: 'session=' + recievedSession + '&clientid=' + clID + '&outputformat=json',
                dataType: 'json',
                success: function(rowData){
        //          console.log(rowData)
                    var newRow = [];
                    var newOrderedRow = [];
            console.log(rRowDataIndex)
                    newRow.push(rRowDataIndex+1, "");
                    for (var title in rowData[0]){
                        newRow.push(rowData[0][title]);
                    }
            console.log(newRow)
                },

            });
        };
    }
},2000)

};

这是问题:
$.ajax()调用之后,rRowDataIndex变量不会更新或更新,但是我无法理解的范围和优先级存在问题 如果我检查2行或更多行,console.log(newRow)的第一个元素将是相同的   任何人都可以帮助我吗? PS。我也不能在网上提供任何代码 谢谢每个人的身体

1 个答案:

答案 0 :(得分:1)

你需要在一个闭包中包装AJAX调用,以便每次循环都捕获rRowDataIndex的值。

function checkUpdate() {
    setInterval(function () {
        var listLength = updateList.length;
        if (listLength > 0) {
            for (var r = 0; r < listLength; r++) {
                //  console.log(r)
                var clID = updateList[r];
                //  console.log(clID)
                var rRow = $('#dataTable tbody tr').find('td[data-clientid="' + clID + '"]').parent('tr');
                //  console.log(rRow)
                var rRowIndex = rRow.index();
                //  console.log(rRowIndex)
                var rRowDataIndex = oTable.fnGetPosition(rRow[0]);
                console.log(rRowDataIndex)
                (function (rRowDataIndex) {
                    $.ajax({
                        url: '/cgi-bin/if-Clients-list.jpl',
                        data: 'session=' + recievedSession + '&clientid=' + clID + '&outputformat=json',
                        dataType: 'json',
                        success: function (rowData) {
                            //          console.log(rowData)
                            var newRow = [];
                            var newOrderedRow = [];
                            console.log(rRowDataIndex)
                            newRow.push(rRowDataIndex + 1, "");
                            for (var title in rowData[0]) {
                                newRow.push(rowData[0][title]);
                            }
                            console.log(newRow)
                        },

                    });
                })(rRowDataIndex);
            };
        }
    }, 2000);
}