Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ui 无法通过循环获取ajax成功函数中的数组元素_Jquery Ui_Jquery - Fatal编程技术网

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

Jquery ui 无法通过循环获取ajax成功函数中的数组元素,jquery-ui,jquery,Jquery Ui,Jquery,上面的代码按照我的预期运行,但是是硬编码的。因此,我使用下面的代码通过for循环执行相同的操作 但是,以下代码中几乎没有问题: 使用console.logkeyval1时,结果是data1_未定义 keyVal1=数据[0],此处日期[0]的值未传递给keyVal1。 有人知道错误在哪里吗?非常感谢 $("#placeholder").bind("plotselected", function (event, ranges) { var ke

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

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

使用console.logkeyval1时,结果是data1_未定义 keyVal1=数据[0],此处日期[0]的值未传递给keyVal1。 有人知道错误在哪里吗?非常感谢

$("#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循环中没有闭包。。。试试这个:

$("#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];

                                    }
                              });
                          }
Ajax成功处理程序:

keyVal1 = {};
keyVal2 = {};
然后按如下方式检索您的值:
keyVal1['data1_1']

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

试试这个:

success: function(data) {

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

                  }

您可以在下面的博客中阅读更多关于for循环中闭包的内容>

您是否检查了成功回调中的i变量?我打赌这是你意想不到的。谢谢@rohk,我已经用你的解决方案解决了第一个问题。然而,第二个问题仍然不起作用。再次感谢,@rohk!该代码仅在变量名称为data1_1或data2_1时有效。因此,keyVal1['data1_1']不能是变量名。嗨@rohk,我已经通过使用eval'data1_'+keysArr[value]+'=data[0]'找到了解决方案,它工作得非常完美。
success: function(data) {

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

                  }
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);
}