2012-01-11 7 views
4

내가javascript 함수에서 json 객체를 반환하는 방법은 무엇입니까?

$(function(){ 
    var tags = getTags('0'); 
}); 

문제점이 나는 함수에서,이 함수를 호출하고있어

function getTags(level){ 
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) { 
     return json; 
    }); 
} 

이 기능을했습니다 getTags() 반환 json입니다

{"tags":["Mathematics","Science","Arts","Engineering","Law","Design"]}

같은 그러나 var tags = getTags('0')에서 반환 값을 받으면가됩니다.값.

값을 잘못 반환하는 방법은 무엇입니까?

+1

가능한 중복 [자바 스크립트 비동기 반환 값 jQuery로/할당 (http://stackoverflow.com/questions/7779697/javascript처럼 다룰 수 -asynchronous-return-value-with-jquery) –

답변

5

이미 많은 다른 것들이 이미 정확하게 설명 되었 듯이, ajax 요청은 기본적으로 비동기로 실행됩니다. 따라서 적절한 방식으로 처리해야합니다. 당신이 할 수있는 일은 jXHR 객체를 반환하는 것입니다.이 객체는 jQuery 약속 생성기로도 구성됩니다. 즉

function getTags(level){ 
    return $.getJSON("php/get-tags.php", { "parent": level }); 
} 

처럼 looke 다음의

$(function(){ 
    getTags('0').done(function(json) { 
     // do something with json 
    }); 
}); 
1

AJAX 통화에서 복귀 할 수 없습니다. 비동기식입니다. 콜백에서 반환 된 데이터를 처리하는 모든 로직이 필요합니다.

1

getJSON이 비동기 인 경우 호출 한 함수는 HTTP 응답이 다시 수신되어 콜백을 트리거 할 때 완료됩니다.

반환 할 수 없습니다.

데이터로하려는 작업을 콜백으로 수행하십시오.

2

동기식으로 비동기 함수를 호출하려고합니다.

getTags를 호출하면 PHP 페이지 호출이 트리거되고 javascript가 차단되면 서버가 JSON으로 응답 할 때까지 페이지가 중단됩니다. 논리를 다시 생각하고 콜백을 트리거해야합니다.

function getTags(level){ 
    $.getJSON("php/get-tags.php", { "parent": level }, function(json) { 
     //do something with the JSON here. 
    }); 
} 
1

이렇게 작동하려면 getTags 함수가 값을 반환해야합니다. 지금은 그렇지 않습니다. $.ajax을 사용하고 asyncfalse으로 설정하면됩니다.

+2

'async : false'는 AJAX 호출이 완료 될 때까지 브라우저 전체를 잠급니다. –

+0

음. 예. 그게 OP가 원하는거야 ..? – bububaba

+1

나는 브라우저가 추락했다고 생각할 수 있기 때문에 나쁜 것입니다. –

관련 문제