2012-11-07 30 views
0

我有问题从返回ajax回调函数里面的另一个函数返回数组。问题是在第一个周期内没有收到阵列数据.....在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 
       } 

回答

0

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

当您拨打$.getJson只需启动HTTP请求,它不会立即填入testArray。相反,在HTTP请求完成后,它将在未来的某个未指定的点中填入testArray

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

  1. 你叫getTestData()
  2. 你开始$.getJSON()
  3. HTTP请求alert(testArray)内getTestData被调用,显示警告。由于testArray尚未填充,因此您有一个空数组。
  4. 当您坐在那里查看警报时,$.getJSON()呼叫完成并填写testArray
  5. 单击警告框上的确定。
  6. return testArray;运行时,返回填充的值
  7. alert第3行运行时,示出了阵列
+0

但警报试验(与返回)始终显示数组的内容连第一次,所以我不理解你的观点。 –

+0

更新了对你所看到的解释。 – slashingweapon

+0

感谢解决方案.. –

相关问题