2010-02-03 4 views
12
TheObject = {

jQuery 아약스 성공 함수에서 배열을 올바르게 반환하는 방법은 무엇입니까?

getArray: function(){ 
     var groups = new Array; 
     $.ajax({ 
       type: "POST", 
       url: "link.php", 
       success: function (data){ 
        var counter = 0; 
        $('g',data).each(function(){  
         var group_name = $(this).find("name").text(); 
         var group_id = $(this).find("id").text(); 
         var group = { 
         id: group_id, 
         name: group_name 
         } 
         groups[counter] = group; 
         counter++; 
        }); 
        return groups; 
       } 
     }); 
    } 

} 

그리고이 메서드를 호출 할 때 :

var a = TheObject.getArray(); 
alert(a); 

그것은 '정의되지 않은'반환합니다. 문제가 어디인지 파악할 수 없습니다. 배열 성공 함수 안에 만들어 지지만 올바르게 반환 할 수 없습니다. 도움 주셔서 감사합니다.

답변

16

코드에서 ajax 호출이 완료된 후 절차 코딩을 사용하여 groups을 찾고 있습니다. 가장 큰 문제는 ajax 호출이 완료되기 전에 groups을 찾고 있다는 것입니다.

또 다른 문제는 그룹을 success() 함수로 반환하지만 TheObject.getArray() 함수는 아무 것도 반환하지 않는다는 것입니다.

그래서 당신은 다음과 같이 아약스 함수에 콜백을 유치해야합니다 다윗의 예

TheObject = { 
    getArray: function(callback) { 
     var groups = new Array; 
     $.ajax({ 
       type: "POST", 
       url: "link.php", 
       success: function (data){ 
        var counter = 0; 
        $('g',data).each(function(){  
         var group_name = $(this).find("name").text(); 
         var group_id = $(this).find("id").text(); 
         var group = { 
         id: group_id, 
         name: group_name 
         } 
         groups[counter] = group; 
         counter++; 
        }); 
        callback.call(this,groups); 
       } 
     }); 
    } 
} 

TheObject.getArray(function(a) { 
    // this code runs when the ajax call is complete 
    alert(a); 
}); 
+0

많은 사람 감사합니다! – ecu

0

어레이에 push을 사용하십시오. 또한 Group이라는 유형을 작성한 다음 루프에서 새 그룹을 작성한 다음 배열로 밀어 넣기를 원합니다.

+0

질문을 읽어보십시오. 배열을 만드는 데 문제가 없습니다. 문제는 성공 함수를 벗어나는 방법을 모른다는 것입니다. – ecu

5

매우 간단한 버전.

TheObject = { 
    getArray: function(callback) { 
     $.ajax({ 
       cache: true, 
       type: "GET", 
       url: "http://www.domain.com/core/domains.php", 
       success: function (data){ 
        callback.call(this,data); 
       } 
     }); 
    } 
} 

TheObject.getArray(function(data) { 
    javascript: console.log(data);  
}); 
관련 문제