JavaScript 함수 내에서 $ .post를 사용하면 변수에 값을 할당 할 수 없습니까?

StackOverflow https://stackoverflow.com/questions/824431

  •  05-07-2019
  •  | 
  •  

문제

함수 내에서 $ .post를 사용하고 결과를 얻은 다음 $ .post 콜백의 결과에 따라 True 또는 False 기능을 반환하려고합니다. 그러나 상위 기능의 반환 이벤트 후 콜백이 발생하는 것 같습니다.

다음은 ret 변수가 항상 정의되지 않은 현재 코드입니다. 그러나 $ .post 콜백 내에서 alert ()가 올바른 결과를 반환합니다.

function elementExists(key, type, path, appid, pid){
    var ret;
    $.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
        ret = data;                         
    });

    alert(ret);
    return ret;

}
도움이 되었습니까?

해결책

발견 한대로 게시물은 비동기 적으로 수행됩니다. 동기식이 되려면 사용해야합니다. ajax 방법을 설정하고 설정하십시오 async 거짓으로 매개 변수. 그러나 게시물이 비동기식이라는 것을 인정하고 콜백에서 수행하는 작업이 게시물을 호출하는 메소드와 무관하게 코드를 작성하는 것이 좋습니다. 분명히, 당신은 정말로 경고 이외의 다른 일을하고 싶지만, 이것을 리팩터링하는 방법을 조언하기가 어렵다는 것을 알지 못하고 있습니다.

편집하다: 코드가 무언가 존재하는지 확인하기 위해 코드를 확인하고 있음을 이해하지만 목적을 위해이를 확인하고 있습니다. 우리가 목적이 무엇인지 알았다면, 메소드를 리팩토링 할 수 있도록 콜백에서이를 달성하는 방법을 추천 할 수 있습니다.

다른 팁

function elementExists(key, type, path, appid, pid){
        $.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
           alert(data);
        });
  }

함수 (데이터)는 호출 뒤로 (비동기)입니다. 그런 값을 반환 할 수 없습니다.

페이지가 호출 될 때까지 콜백이 호출되지 않지만 $ .post를 호출 한 직후 "Retur"가 실행됩니다.

설정하려면 Syncronous Set Async : False

문서를 참조하십시오http://docs.jquery.com/ajax/jquery.post#urldatacallbacktype

문제는 코드가 비동기 적으로 실행된다는 것입니다. ALERT (RET)는 실제로 RET = DATA 전에 호출되며 AJAX 요청이 완료 될 때 발생합니다.

사용하여 Ajax 호출을 동기식으로 만들 수 있습니다. 비동기 옵션 또는 코드를 재 설계하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top