2010-01-08 11 views
3

함수를 작성하려고하면 함수가 Ajax 호출에서 문자열을 반환합니다.ajax 호출에서 변수를 반환하는 함수

function GetText(getThis) { 
    var current = GetMarketAndLang(); 
    var dataToReturn = "Error"; 
    $.get('inc/ajaxGetText.php', {lang : current.lang, market : current.market, name : getThis}, 
     function(data){ 
      dataToReturn = data; 
    }); 
    return dataToReturn; 
} 

내가 AJAX 호출이 올바른지 볼 수 있지만 전체 기능은 여전히 ​​대신에 "및"텍스트 "오류"를 반환 불을 지르고 사용 :

이 내 코드입니다. 왜 그런데 내가 뭘 할 수 있을까?

감사합니다.

답변

5

AJAX 쿼리 –의 비동기 특성 때문에 응답이 돌아 오기 전에 함수가 반환됩니다. 이 문제를 해결하려면, 전체 깃털 $.ajax() 기능을 사용하고 asyncfalse에 설정해야합니다 요청에 따라서, 계속 스크립트의 실행 전에 돌아올 때까지

function GetText(getThis) { 
    var current = GetMarketAndLang(); 
    var dataToReturn = "Error"; 

    $.ajax({ 
     url: 'inc/ajaxGetText.php', 
     type: 'GET', 
     async: false, 
     success: function(data) { 
      dataToReturn = data; 
     } 
    }); 

    return dataToReturn; 
} 

이 기다릴 스크립트를 강제로, 변수는 이제는 AJAX 호출에서 반환 된 것입니다.

+0

빠른 응답을 보내 주셔서 감사합니다. – Marreone

+1

-1 코드가 작동하는 동안 이것은 거의 적절한 해결책이 아닙니다. –

3

AJAX 호출이 비동기이기 때문입니다. 귀하의

function(data){ 
    dataToReturn = data; 
} 

비동기식 AJAX 호출이 완료 될 때까지 실행되지 않습니다. return dataToReturn은 실제로 AJAX 호출에서 콜백 함수보다 먼저 실행됩니다.

이 작업을 수행하는 이상적인 방법은 dataToReturn을 사용하는 함수를 콜백에서 호출하는 것입니다.

또는 AJAX 호출이 완료 될 때 GetText에 대한 함수를 전달하십시오.

1

ajax 호출이 "비동기 적으로 실행되고있는 중"오류가 즉시 반환되는 이유입니다. 아약스 결과가 돌아 오려면 $ .ajax를 사용하여 동기식 GET을 수행해야합니다.

관련 문제