2013-05-01 9 views
2

서버에 연결하여 JSON 객체를 검색하는 함수를 작성하고 있습니다. 처리하고 일부 HTML 태그에로드 할 값이있는 일반 배열을 반환합니다. 다른 방법을 사용하여 수행 할 수 있지만 다음 코드를 사용하고 있음을 알고 있습니다.콜백 메소드 외부에서 JSON 객체에 액세스하기

var names = new Array(); 
function fetch (key) { 
    var url = 'server/server.php?key=' + key 
    $.getJSON(url , sett = function(data) { 
    $.each(data, function(key, value){ 
     names[key] = value['name']; 
    }); 
    console.log(names);//works and print the values 
    }); 
    console.log(names);//doesn't work, shows and empty array 
} 

나는 jQuery를 각에 의해 필터링 된 값을 개최 배열을 반환하려는, 그래서이 기능은 어떤 큰 응용 프로그램의 표준 기능으로 작업 할 수 있습니다. 어떻게 할 수 있습니까?

+1

데이터를 가져올 때까지 기다려야하므로 작동하지 않습니다. '.getJSON' 안에 코드를 넣으십시오. –

+0

내가하는 방식 (콜백 내에서 초보자이기 때문에 가장 좋지 않을 수도 있음)은 json 값을 콜백 내 전역 값과 같게 만드는 것이다. 마지막 문장은 전체 처리 함수에 대한 함수 호출이다. 나는 내가하는 것보다 더 많은 지식을 가진 사람들이 어떻게하는지 알기를 바랍니다. – Terry

+0

콜백은이를 수행하는 좋은 방법이지만 공식적인 방법은 기능 완료시에 발생하는 지연 또는 맞춤 이벤트를 사용하는 것입니다. –

답변

1

ajax 요청은 약간의 시간이 필요하지만 짧은 시간이지만 여전히 시간이 걸리기 때문에 ajax 호출 외부에있는 console.log은 ajax 호출이 완료되기 전에 실행되어 원래의 빈 상태로 표시됩니다. 정렬.

당신은

function fetch (key, callback) { 
    var url = 'server/server.php?key=' + key 
    $.getJSON(url , sett = function(data) { 
    $.each(data, function(key, value){ 
     names[key] = value['name']; 
    }); 
    // call callback inside the getJSON callback  
    callback && callback.call(this, names); 
    }); 
} 

지금, 콜백 함수는 인수 한 같은 names 배열을해야합니다 ... ... 당신의 fetch 기능에 너무

콜백 매개 변수를 추가 할 수 있습니다.

fetch(some_key, function(names){ 
    console.log(names); //should work! 
}); 
+0

감사합니다 형, 그것은 매력처럼 작동했습니다 :) –

+0

다른 사람들이 쉽게 상위 응답을 찾을 수 있도록 아무 문제없이 대답을하십시오. – anson

0

배열 요소를 배열에 추가하려고합니다.

names.push(value['name']); 

더 많은 사전 접근법을 원한다면 (이렇게하는 것이 좋습니다.)이 방법을 시도해보십시오. 또한

JavaScript dictionary with names

, 다른 의견을 읽고 더 ... 당신은 '성공'콜백으로 결과를 통해 루프 코드를 이동할 수 있습니다 생각 후. 행운

http://api.jquery.com/jQuery.getJSON/

좋은!

+0

또는'Objects' ...'var names = {};' –

+0

예 , 값을 보유 할 자바 스크립트 클래스를 정의 할 수도 있습니다. http://www.phpied.com/3-ways-to-define-a-javascript-class/ 그런 다음 해당 객체의 배열을 만듭니다. –

0

테스트하지 않았습니다. 하지만 다음과 같이 작동해야합니다 :

var names = new Array(); 
function fetch (key) { 
    var url = 'server/server.php?key=' + key 
    $.ajax({ 
    url: url, 
    type: "get", 
    success: function(data) { 
     $.each(data, function(key, value) { 
     names[key] = value['name']; 
     }); 
     console.log(names); // this should still work 
    }, 
    dataType: "json", 
    async: false 
    }); 
    console.log(names); // this should now work 
} 

그러나 실제로는 동기화 요청을 멀리해야합니다.

관련 문제