2012-07-16 82 views
0

我想创建一个递归函数,其中有一个Ajax请求。我正在尝试访问一个数组,它在ajax请求中处理,来自外部递归函数,它返回初始值。不能访问该功能之外的ajax请求的响应

我的代码看起来像

function retreiveData(testArgument) 
     { 
     $.ajax({ 
     url:"testManipulate.php", 
     type: 'POST', 
     data: 'dataString', 
     datatype: 'json', 
     data: {field : queryData, start : testArgument}, 
     success:function(jsonQuery) 
     { 

     $.ajax({ 
      url: base_uri + path, 
      type:'POST', 
        data : jsonQuery, 
      success : function(terms){ 
      var responseJson=JSON.parse(terms); // response JSON generated on download button click 
      for (var g = 0; g < responseJson.hits.hits.length; g++) { 
      test[g] = (_generate_list(c, _field_select)); //function 
      if(test[g].length!==0){ //Leaving out blank entries 
      newTest[k]=test[g].join("; ") + "\n"; //separating each individual values with semi colon 
       k++; 
     } 
     } 
     if(testArgument < (4-1)*10) 
      { 
        retreiveData(testArgument+10); 
      } 
      i++ 
      } 
     }); 
    }; 
    retreiveData(0); 
    alert(newTest.length); 

提醒newTest.length只会警报0,它不会给出最终值,即数组长度。什么可能是错的?

回答

0

这是因为你的Ajax功能是异步,你应该有一个回调函数试试:

function retreiveData(testArgument, callBack) 
    { 
    $.ajax({ 
    url:"testManipulate.php", 
    type: 'POST', 
    data: 'dataString', 
    datatype: 'json', 
    data: {field : queryData, start : testArgument}, 
    success:function(jsonQuery) 
    { 

    $.ajax({ 
     url: base_uri + path, 
     type:'POST', 
       data : jsonQuery, 
     success : function(terms){ 
     var responseJson=JSON.parse(terms); // response JSON generated on download button click 
     for (var g = 0; g < responseJson.hits.hits.length; g++) { 
     test[g] = (_generate_list(c, _field_select)); //function 
     if(test[g].length!==0){ //Leaving out blank entries 
     newTest[k]=test[g].join("; ") + "\n"; //separating each individual values with semi colon 
      k++; 
     } 
     callBack(newTest); 
    } 
    if(testArgument < (4-1)*10) 
     { 
       retreiveData(testArgument+10); 
     } 
     i++ 
     } 
    }); 
}; 
retreiveData(0, function(newTest){ 
    alert(newTest.length); 
});