0

我在从另一个函数内部的返回 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
              }
4

1 回答 1

0

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

当你调用$.getJson刚刚启动的 HTTP 请求时,它不会立即填写testArray。相反,它会在 HTTP 请求完成后的testArray 某个未指定的时间点填充。

您看到其中一个警报但看不到另一个警报的原因很简单:当您单击第一个警报的“确定”按钮时,请求已完成并且您的答案已准备好。我敢打赌,您看到的第一个getTestData警报(失败)实际上是 inside 。以下是可能的事件顺序:

  1. 你打电话getTestData()
  2. 你开始一个 HTTP 请求$.getJSON()
  3. 调用内部alert(testArray) getTestData,显示警报。由于testArray尚未填写,因此您有一个空数组。
  4. 当您坐在那里查看警报时,$.getJSON()呼叫完成并填写testArray
  5. 您单击警报框上的确定。
  6. return testArray;运行,返回填充的值
  7. alert的第 3 行已运行,显示数组
于 2012-11-07T17:08:23.030 回答