2010-05-16 10 views
5

내 자신의 함수에서 jQuery 아약스 호출에서 반환을 사용하려고하지만 그것은 정의되지 않은 반환 유지합니다.jquery ajax 호출에서 반환

function checkUser2(asdf) { 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: "check_user.php", 
     data: { name: asdf }, 
     success: function(data){ 
      return data; 
      //alert(data); 
     } 
    }); 
} 

$("#check").click(function(){ 
    alert(checkUser2("muma")); 
}); 

내 경고의 주석을 때 올바른 수익을 얻을 수 있기 때문에 AJAX 호출이 확실히 작동하고, 나는 불을 지르고에서 볼 수 있습니다. 바보 같은 짓하고있어?

답변

7

AJAX 호출은 비동기식입니다. 즉, AJAX 요청은 일반적인 프로그램 실행 순서가 잘못되어 프로그램에서 checkUser2()이 경고에 데이터를 반환하지 않음을 의미합니다.

이런 식으로 $.ajax() 호출의 반환 값을 사용할 수 없으며 대신 AJAX 반환 데이터를 사용하는 코드를 success() 함수로 옮기십시오.

1

대신을 시도해보십시오

function checkUser2(asdf) { 
    var result; 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: "check_user.php", 
     data: { name: asdf }, 
     success: function(data){ 
      result = data;    
     } 
    }); 
    return result; 
}  


$("#check").click(function(){ 
    alert(checkUser2("muma")); 
}); 

대신 전역 자바 스크립트 변수로 결과 변수를 이동 할 수 있습니다. 나는 아직 이것을 시험하지 않았다. 당신은이 작업을 수행 할 수

+1

그러나 동기식 아약스는 정말 나쁜 생각입니다. – Pointy

+0

나는 동의한다. 그러나 그것이 OP가 가지고 있었던 문제를 해결하는 길이었다. 그리고 그는 이미 비동기 방식으로 ajax 함수를 사용하고있었습니다. – Falle1234

+0

이 방법은 나에게도 효과가 없었습니다. $ ("# submitPO"). (function() { alert (updatePO ("444")), }}을 클릭하십시오. 경고를 울리지 않았습니다. 내 기능은 당신과 같은 방식으로 구성됩니다. –

3

, 나는 생각 다음 jquery doc page for ajax function의 4 예에서와 같이

function checkUser2(asdf) { 
    var s = $.ajax({ 
     type: "POST", 
     async: false, 
     url: "check_user.php", 
     data: { name: asdf }, 
     success: function(data){ 
      return data; 
      //alert(data); 
     } 
    }).responseText; 
    return s; 
}  

하지만이 말한다, 요청이 활성화되어있는 동안 나는

블록이 브라우저를 생각합니다. 동기화가 필요한 경우 다른 방법으로 사용자 상호 작용을 차단하는 것이 좋습니다.

+0

"async : false"가 비동기 적으로 호출을 중지시키는 핵심 부분 이었기 때문에 거의 동일한 시나리오에서 문제가 해결되었습니다. –

0

jQuery의 데이터 메소드를 사용하여 "데이터"를 저장하고이를 글로벌 jQuery 객체 또는 로컬 jQuery 선택기와 연결할 수도 있습니다. 예 :

success: function(data) { 
    $.data('result', data); 
} 

반환 값은은 또한 지역 변수에이를 연결할 수

$.data('result') 

를 사용하여 어디서나 액세스 할 수 있습니다 (예 : $ ('#에 대한 myid')에 대한. 데이터를()) 그래서 그 전역 범위가 아닌 해당 개체에 대해 로컬입니다.

+0

나는 당신의 제안을 사용하여 시도했다. 나는 그것을 작동시킬 수 없었다. $ ("# submitPO"). (function() { alert ($. data ('result')); }); 아무것도하지 않았다. –

관련 문제