2011-09-26 11 views
0

아약스 호출이있는 함수에서 json 값을 가져 오려고합니다. 아약스 호출이있는 함수에서 json 값 가져 오기

내 기능입니다 : 내가 VAR1 var에 firstvar = getVariables()을 얻기 위해 내 자바 스크립트에서 이것을 사용하는 것을 시도하고있다

function getVariables(){ 

    $.ajax({ 
     type: "post", 
     url: "db/functions.php", 
     data: "func=getvars, 
     dataType: "json", 
     success: function(response) 
     {   
     return { 
      'var1': response.var1, 
      'var2': response.var2 
     }; 
     } 
    });  
} 

VAR1;.

getVariables 함수에서 경고를 설정하면 var1 및 var2가 반환되고 이미 체크 아웃되어 있습니다. 따라서 제대로 작동하지 않는 부분은 다음과 같습니다. var firstvar = getVariables(). var1; 기본적으로, 비동기,

아약스 전화 :

답변

0

이 두 가지 문제가 있습니다. 즉, 성공 함수는 getVariables이 반환 된 후 언젠가는 호출되지 않습니다. 아약스 호출이 동기되도록 설정을 변경해야합니다.

두 번째 문제점은 값이 성공 함수에서 반환되었지만 getVariables 함수에서 반환되지 않는다는 것입니다. 함수 범위에서 변수를 반환해야합니다.

다음은 동일한 기능이지만, async 옵션을 false로 설정하고 함수의 범위에서 반환 된 값을 사용합니다.

function getVariables(){ 
    var rv = undefined; 
    $.ajax({ 
     async : false, 
     type: "post", 
     url: "db/functions.php", 
     data: "func=getvars", 
     dataType: "json", 
     success: function(response) 
     {   
     rv = { 
      'var1': response.var1, 
      'var2': response.var2 
     }; 
     } 
    });  
    return rv; 
} 
+0

오류가 발생했습니다. getVariables()가 정의되지 않았습니다. – nouky

+0

@nouky - 구문 오류 일 가능성이 큽니다. 함수를 잘못 입력하거나 대괄호가 일치하지 않습니다. IE9에서 F12 개발자 도구를 사용하여 실행 해보십시오. 도움이되는지 확인하십시오. –

+0

ok thanks 앤드류 – nouky

0

익명 성공 기능은 var1var2 (어디를) 반환하지만 getVariables 그들을 반환하지 않습니다. 실제로 비동기 JSON 호출이 완료되기 전에 종료 되었기 때문에 실제로는 불가능합니다. 동기식이라하더라도 익명의 "하위 함수"의 반환 값은 반환하지 않습니다.

편집 :

function getVariables(){ 

    var response = $.ajax({ 
     type: "post", 
     url: "db/functions.php", 
     data: "func=getvars, 
     dataType: "json", 
     async: false 
    }); 
    return {'var1': response.var1, 
      'var2': response.var2} 
} 

는 return 문이없는 getVariables 내부 기능에, getVariables에 지금은 방법 : 당신은 같은 것을 할 수 있을까? 이제 getVariables가 값을 반환합니다.

async : false를 사용하면 브라우저가 잠길 수 있으므로주의해야합니다.

+0

추가 한 경우 : async : false 도움이되지 않습니까 ?? – nouky

+0

return 문도 함께 이동하면 제대로 작동합니다. 위의 편집을 참조하십시오. – Dave

+0

나는 정의되지 않은 변수를 얻고있다. 나는 당신이 더 잘 이해할 수 있도록 전체 코드를 게시 할 필요가 있다고 생각한다. – nouky

0

그건 효과가 없습니다. AJAX 호출은 비동기식이기 때문에 반환 값을 사용하기 전에 http 요청이 완료 될 때까지 기다려야합니다.

AJAX 호출을 동기식으로 만들 수 있지만 불필요한 지연이 발생할 수 있습니다. 일반적으로 더 나은 옵션은 콜백 "success"함수에서 직접 변수를 사용하는 것입니다.

+0

다른 상황에서 사용할 수 있도록 값을 반환하고 싶습니다. 예를 들어 한 번만 입력 할 때 등의 값으로 입력 할 때 – nouky

+0

Ajax 호출을 동기식으로 만들면 효과가 있다고 생각할 수 있습니다. getVariables()를 호출 할 때마다 http 요청을합니다. 반환 된 데이터를보다 쉽게 ​​액세스 할 수있는 범위로 푸시 할 수 있지만 목표를보다 완벽하게 파악하지 않으면 코드를 제공하기가 어렵습니다. – Colin

+0

나는 전체 코드를 온라인에 게시 할 것이므로 시나리오를 더 잘 볼 수있다. – nouky