无法通过循环获取ajax成功函数中的数组元素

时间:2011-11-09 09:04:29

标签: jquery-ui jquery

$("#placeholder").bind("plotselected", function (event, ranges) {

                          var keysArr = [1, 6, 8];

                          for (var i = 0; i < keysArr.length; ++i){

                              $.ajax({
                                    type:"post",
                                    dataType:"json",
                                    data:{"minVal":ranges.xaxis.from, "maxVal":ranges.xaxis.to, "sid":keysArr[i]},
                                    url:"getDataByZoom.php",

                                    cache: false,
                                    success: function(data) {

                                            data1_1 = data[0];
                                            data2_1 = data[1];
                                            data1_6 = data[0];
                                            data2_6 = data[1];
                                            data1_8 = data[0];
                                            data2_8 = data[1];

                                    }
                              });
                          }

上面的代码按照我的预期运行但是硬编码。因此,我使用下面的代码通过for循环执行相同的操作。

但是,以下代码中几乎没有问题:

  1. 使用console.log(keyval1)
  2. 时,结果为data1_undefined
  3. keyVal1 = data [0],这里date [0]的值没有传递给keyVal1。
  4. 有没有知道错误在哪里?谢谢你!

    $("#placeholder").bind("plotselected", function (event, ranges) {
    
                              var keysArr = [1, 6, 8];
    
                              for (var i = 0; i < keysArr.length; ++i){
    
                                  $.ajax({
                                        type:"post",
                                        dataType:"json",
                                        data:{"minVal":ranges.xaxis.from, "maxVal":ranges.xaxis.to, "sid":keysArr[i]},
                                        url:"getDataByZoom.php",
    
                                        cache: false,
                                        success: function(data) {
    
                                                keyVal1 = 'data1_' + keysArr[i];
                            keyVal2 = 'data2_' + keysArr[i];
    
    
                                                keyVal1 = data[0];
                                                keyVal2 = data[1];
    
                                        }
                                  });
                              }
    

2 个答案:

答案 0 :(得分:0)

你的for循环没有关闭...试试这个:

for (var i = 0; i < keysArr.length; ++i){
                 (function(value) {
                          $.ajax({
                                type:"post",
                                dataType:"json",
                                data:{"minVal":ranges.xaxis.from, "maxVal":ranges.xaxis.to, "sid":keysArr[value]},
                                url:"getDataByZoom.php",

                                cache: false,
                                success: function(data) {

                                        keyVal1 = 'data1_' + keysArr[value];
                    keyVal2 = 'data2_' + keysArr[value];


                                        keyVal1 = data[0];
                                        keyVal2 = data[1];

                                }
                          });
                          })(i);
                      }

修改:你想用keyVal1做什么?使用此代码,您将覆盖循环的每次迭代的旧值。你为什么不使用像这样的对象

keyVal1&amp;的初始化keyVal2:

keyVal1 = {};
keyVal2 = {};

Ajax成功处理程序:

success: function(data) {

                    keyVal1['data1_' + keysArr[value]] = data[0];
                    keyVal2['data2_' + keysArr[value]] = data[1];

                  }

然后你像这样检索你的价值:     keyVal1 [ 'data1_1']

答案 1 :(得分:0)

你需要在循环中有闭包,否则你调用AJAX请求成功的函数将在i循环完成后继承for的值。

试试这个:

for(var i = 0; i < keysArr.length; ++i) {
    (function(value) {
        $.ajax({
            type:"post",
            dataType:"json",
            data:{"minVal":ranges.xaxis.from, "maxVal":ranges.xaxis.to, "sid":keysArr[value]},
            url:"getDataByZoom.php",
            cache: false,
            success: function(data) {
                keyVal1 = 'data1_' + keysArr[value];
                keyVal2 = 'data2_' + keysArr[value];
                keyVal1 = data[0];
                keyVal2 = data[1];
            }
        });
    }) (i);
}

您可以在以下Blog&gt;中详细了解for循环中的闭包。 http://www.mennovanslooten.nl/blog/post/62