2013-06-28 5 views
2

jquery ajax 호출에서 복귀하려면 도움이 필요한 Im. 내가 수익을 다시 얻을 수있는 방법jquery ajax 범위 문제

function dbCall(lat, lng){ 
    $.ajax({ 
    type: "GET", 
    url: 'http://localhost:81/myproject/proxy.php', 
    data: { url: lat + ',' + lng, units: "auto" } 
    }).done(function(data) { 
     if(data != '' && (data)) { 
      var dataJSON = JSON.parse(data); 
      //console.log(dataJSON); 
      return dataJSON; 
     } else { 
      return false; 
     } 
    }); 
} 

:

var condition = dbCall(km_point['jb'], km_point['kb']);//lat,lng 
console.log(condition); 

을 console.log 인쇄는 여기

가 dbCall 기능이다 "정의되지 않은"여기

내가 무엇을 가지고 있습니다 내 전화 기능에?

+2

** async **의 멋진 세계에 오신 것을 환영합니다! 너는 그렇게 할 수 없다. 약속을해야합니다. – SLaks

답변

2

AJAX 요청이 비동기, 당신은 하나의 함수 내부의 AJAX 호출의 응답에서 수익을 얻을 수 없음을 의미합니다. 이 작업을 수행하는 더 좋은 방법은 AJAX 요청이 완료되면 호출되는 콜백 함수를 사용하는 것입니다.

function dbCall(lat, lng, callback){ 
    $.ajax({ 
    type: "GET", 
    url: 'http://localhost:81/myproject/proxy.php', 
    data: { url: lat + ',' + lng, units: "auto" }, 
    dataType: 'json' 
    }).done(function(data){ 
     callback(data); // execute callback function and pass data 
    }); 
} 
+0

그러면 왜'.done (callback) '이되지 않을까요? – zeroflagL

+0

@zeroflagL 좋은 지적이다. 콜백 함수를 실행하기 전에 추가적인 에러 검사 등을하고 싶을 때도있다. – Seth

3

비동기식이므로 결과를 기다려야합니다. 동기식 ajax 만 사용해야합니다. 사용하지 않아야합니다.
변경 done() 콜백의 결과를 사용하는 코드 :

function dbCall(lat, lng){ 
    return $.ajax({ 
     type: "GET", 
     url: 'http://localhost:81/myproject/proxy.php', 
     data: { url: lat + ',' + lng, units: "auto" }, 
     dataType: 'json' 
    }); 
} 

dbCall(km_point['jb'], km_point['kb']).done(function(condition) { 
    console.log(condition); 
});