在ajax回调函数函数内返回数组的最佳方法是什么?

时间:2012-11-07 17:02:38

标签: jquery

我遇到了从返回的ajax回调函数获取返回数组的问题,该函数位于另一个函数内部。问题是在第一个周期内没有接收到数组数据.....

              var testFile = $("#selection").val();
              var testData = getTestData(testFile); 
              alert(testData); // not working during the first time I run the function, empty


              function getTestData(testF)
              {
                  var testArray = [];

                  $.getJSON("test.php",{fileTest: testF}, function(data)
                  {
                         $.each(data, function(index, value)
                         {
                              if(value == "")
                              {
                              }else
                              {
                                 testArray[index] = value;
                              }
                         }
                   });
                   alert(testArray); // working I see the values
                   return testArray; // not working the first time running this function
              }

1 个答案:

答案 0 :(得分:0)

Ajax调用是异步的。这是什么意思?

当您致电$.getJson时,只需启动HTTP请求,它就不会立即填写testArray。相反,它会在HTTP请求完成后填写testArray 在未来某个未指定的位置

您看到其中一个警报而不是另一个警报的原因很简单:当您单击第一个警报的“确定”按钮时,请求已完成,您的答案已准备就绪。我愿意打赌,你所看到的第一个警告(失败)实际上是getTestData内的警报。这是可能的事件序列:

  1. 您致电getTestData()
  2. 您使用$.getJSON()
  3. 启动HTTP请求
  4. 调用getTestData 中的alert(testArray) ,显示警报。由于尚未填写testArray,因此您有一个空数组。
  5. 当您坐在那里查看提醒时,$.getJSON()来电完成并填写testArray
  6. 您在警告框中单击“确定”。
  7. 运行
  8. return testArray;,返回填充值
  9. 第3行的alert正在运行,显示数组