2012-02-16 3 views
1
get.php에서
function get(){ 
     $.get('/get.php', function(data) { 
      alert('one: ' + data) 
      return data; 
     }); 
    } 

    var test = get(); 
    alert('two:' + test); 

은 다음과 같습니다

<?php echo "number"; ?> 

왜 하나의 경고가 나에게 하나를 보여 수

그러나이 경고가 나에게 두 가지를 보여 정의되지 않은

이 값을 함수 밖에서 어떻게 얻을 수 있습니까?

답변

7

$.get 호출은 비동기입니다. 즉, 콜백 결과 (function(data) { ... })가 콜백 결과와 함께 실행되면 해당 콜백 내부에서 return을 실행할 수 없습니다. 실행될 때 외부 함수 ($.get)가 이미 반환되었습니다. 대신 이 같은 시도하십시오.

// callback will be executed with the response from your GET request 
function get(callback){ 
    $.get('/get.php', callback); 
} 

// Call get with a callback receiving the response 
get(function(data) { 
    alert('two:' + data); 
}); 

이것은 당신이 자바 스크립트 코드를 작성할 때에 익숙해 져야하는 패턴입니다

1

당신의 return data하지 가져 오기에서, 아약스 익명 함수에서 반환() 함수를 .

1

이것은이 stat get() 함수가 이미 앞에 을 반환하고 $ .get()의 콜백이 실행되었습니다. 아약스 요청은 비동기입니다.

는 실행 단계 무엇 :

  1. 통화의 get()
  2. 의 get()는
  3. 아약스 요청이 끝나고 $의 콜백을 반환 시작 $ 갔지()와
  4. Ajax 요청 .get()이 실행됩니다.

이 경우를 처리하기 위해 일반적으로 콜백을 매개 변수로 전달합니다 (

).
function get(callback) { 
    $.get('/get.php', function(data) { 
     if ($.isFunction(callback)) { 
      callback(data); 
     } 
    }); 
} 
관련 문제