2013-04-11 3 views
-1

$ .post를 사용하여 데이터를 검색하고 리턴 유형으로 저장하려고합니다. 그러나, 나는 항상 정의되지 않은 오류가 발생합니다.포스트 아약스의 리턴 데이터가 작동하지 않습니다.

내가 뭔가를 할 경우 :

function get_list(){ 
     $.post('php/reverse.php', function(data){ 
     alert(data); 
     }); 
    } 

모든 것을 완벽하게 작동합니다. 하지만 내가 뭔가를한다면

function get_list(){ 
      $.post('php/reverse.php', function(data){ 
      return data; 
      }); 
     } 

alert(get_list()); 

갑자기 나에게 정의되지 않은 오류가 발생합니다. 누군가 내가 뭘 잘못하고 있는지 말할 수 있습니까?

function get_image_list(handler){ 
    $.post('php/reverse.php', function(data){ 
     handler(data); 
    }); 
} 

get_image_list(function(data){alert(data);}); 
+0

범위를 고려하십시오. 익명의 함수가 데이터를 반환한다고 말하고 있지만이 포스트 호출을 포함하는 함수는 아무 것도 반환하지 않습니다. –

+0

어떻게 해결할 수 있습니까? – kuwame

+0

익명 콜백 함수가 실행되기 전에 get_list 함수가 반환된다는 점을 고려하십시오. 'get_list' 함수는 실행 중에'return' 명령문에 결코 도달하지 않기 때문에 undefined를 반환합니다. 'return data' 문은 콜백 함수 안에 있고'get_list' 함수의 일부로 실행되지 않습니다. 콜백 함수는 비동기 POST 요청이 완료된 후에 실행되지만 호출하는 코드는 반환하는 내용을 신경 쓰지 않습니다. – tcovo

답변

4

당신은 비동기 상황에서 이러한 데이터를 반환 할 수 없습니다 ...

당신은 성공에서 실행되는 일부 콜백을 통과해야합니다. AJAX 호출이 콜백을 발생시킬 때까지 다른 모든 코드가 오래 실행되었으므로 콜백 함수에서 값을 반환 할 수 없습니다.

+0

좋아요! 완벽하게 작동합니다! – kuwame

0

이 때문에 AJAX의 asynchronous 특성이다 :

1

get_image_list는 return 문이 없으므로 실제로 아무 것도 반환하지 않습니다. AJAX 호출은 비동기 적으로 수행됩니다. 예상대로 조각이 작동하려면, 그것은 같은 것을 볼 것이다 : 이것은 좋지 않은

function get_image_list(callback) { 
    $.post('php/reverse.php', function(data){ 
     callback(data); 
    }); 
} 

get_image_list(function(data) { alert(data); }); 
0

을하지만, 아직 비동기 호출에 익숙하지 않은 것 같다. 콜백을 조사하십시오. false로 비동기를 설정하면

function getList(){ 
    var dataToReturn; 
    $.ajax({ 
     url: "php/reverse.php", 
     async: false 
    }).done(function(data){ 
     dataToReturn = data; 
    }); 
    return dataToReturn; 
} 

alert(getList()); 

, 당신은 데이터를 사용할 준비가 될 때까지 기다리도록 코드를 강제하고 있습니다 : 이 당신이 찾고있는 코드가, 말했다 가졌어요. 그렇게하면 'dataToReturn'에 할당 할 수 있고 함수 실행이 끝날 때 반환 할 수 있습니다. 기본적으로 async는 true이므로 데이터 준비가 완료되기 전에 실행이 함수 끝까지 도착하므로 반환 할 내용이 없습니다.

관련 문제