如何在ajax成功的每个tr中获取循环的数组值

时间:2013-07-01 17:34:04

标签: ajax codeigniter

我的Ajax代码在

之下
var stack = new Array();
var item_ids_array = new Array();
var inc_i;
var f=0;

for(inc_i =0; inc_i <item_array_length; inc_i++)
{
    stack[f] = item_ids_array[inc_i];
    f=f+1;

    $.ajax({
        type: "POST",
        url: "<?php echo base_url(); ?>index.php/items/get_item_ids_info/"+item_ids_array[inc_i],
        cache: false,
        success: function(data){
           $('<tr class="field" id="row'+item_ids_array[inc_i]+'">'+data+'</tr>').fadeIn('slow').appendTo('#sortable_table');
        }

    });
}

在Success中,item_ids_array[inc_i]正在显示每行(tr)ID中的最后一个数组值,如果Row(tr)的追加值超过1。

例如,如果Row(tr)是三(3)。然后在每个tr ID中仅显示item_ids_array[inc_i] = item_ids_array[2]的值。

基本上我需要item_ids_array[inc_i]的值显示在每个不同的tr ID中。

如何在tr中获得不同的数组值。 请帮帮我。

2 个答案:

答案 0 :(得分:1)

问题在于您的AJAX回调,它们都使用相同的inc_i变量。在循环之后,它将是最终值。

您需要添加另一个闭包来“捕获”每个回调的inc_i值。

var stack = new Array();
var item_ids_array = new Array();
var inc_i;
var f=0;

function createCallback(i){
    return function(data){
        $('<tr class="field" id="row'+item_ids_array[i]+'">'+data+'</tr>').fadeIn('slow').appendTo('#sortable_table');
    };
}

for(inc_i =0; inc_i <item_array_length; inc_i++){

    stack[f] = item_ids_array[inc_i];
    f=f+1;

    $.ajax({
        type: "POST",
        url: "<?php echo base_url(); ?>index.php/items/get_item_ids_info/"+item_ids_array[inc_i],
        cache: false,
        success: createCallback(inc+i)    
    });
}

答案 1 :(得分:1)

不要求循环中的ajax因为ajax超时而导致多个请求丢失。并且可能是你可以通过使用递归函数来解决这个问题,当ajax请求成功时发送另一个请求。可能这可能是可以帮到你

var f=0;
inc_i = 0;
var item_ids_array = new Array();
var stack = new Array();

function Y_fn(inc_i,f) {
        stack[f] = item_ids_array[inc_i];
        f=f+1;
        $.ajax({
            type: "POST",
            url: "<?php echo base_url(); ?>index.php/items/get_item_ids_info/"+item_ids_array[inc_i],
            cache: false,
            success: function(data){
               $('<tr class="field" id="row'+item_ids_array[inc_i]+'">'+data+'</tr>').fadeIn('slow').appendTo('#sortable_table');
            inc_i +=1;
             Y_fn(inc_i,f);  // recursive function
            }

        });
    }