2012-07-16 2 views
0

여기에 ajax 요청을 포함하는 재귀 함수를 만들려고합니다. 내가 측면에서 아약스 요청 처리 외부, 재귀 함수에서 bt 초기 값을 반환합니다 배열에 액세스하려고합니다.해당 함수 외부의 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); 
}); 
관련 문제