2013-02-26 4 views
0

여기를 묻는 생각을하기 전에 잠시 동안 답을 찾고 있었지만 방금 막혔습니다.jQuery post() true 또는 false를 반환합니다.

내가 내와 비슷한 기사/질문을 읽을 수 있지만 결국이 한 다음했습니다

그리고 이걸로 끝났다 :

var del_act = (function(){ 
    var resp; 

    $.post(url+'delete/'+id, 'json') 
    .done(function(data) { 
     custom_alert(type.toUpperCase()+' deleted succesfully!'); 
     if(redirect) 
      window.location.replace(url); 
     resp = true; 
    }) 
    .fail(function(jqXHR, textStatus, errorThrown) { 
     console.log(jqXHR); 
     if(jqXHR['status'] == 404) 
      custom_alert(type + ' not found'); 
     resp = false; 
    }); 

    return {getResp: function() 
    { 
     console.log(resp); 
     return resp; 
    }}; 
})(); 

console.log(del_act.getResp()); 

하지만 oblem은 모두 console.logundefined 응답을 반환한다는 것입니다. 내가 을 async: false,과 함께 사용할 수 있다는 것을 알고 있지만 원하지 않습니다. 따라서 true 또는 false 응답을 반환하는 방법을 찾으려고합니다.

답변

3

$.post()은 비동기식입니다. 즉, 요청이 전송 된 직후에 반환되며 이후 코드가 순차적으로 실행됩니다. 이 경우에 console.log이 호출되었지만 요청이 비동기 적으로 실행되어 반환 값을 가져올 수 없습니다.

이러한 종류의 비동기 시나리오를 처리하는 방법은 콜백을 사용하는 것입니다 (예 : returnCallback 매개 변수를 지정하고 $.post 호출의 "done"콜백에서 호출합니다.

var del_act = (function(doneCB){ 
    var resp; 

    $.post(url+'delete/'+id, 'json') 
    .done(function(data) { 

     // Call CALLBACK specifying return status 
     doneCB(true) 
    }) 

비동기 코드의 문제는 계단식 콜백에서 모든 작업을 수행해야한다는 것입니다. 당신은 수행 할 수 없습니다

console.log(del_act(whatever)) 

을 그에게 undefined을 줄 것이기 때문에, 앞서 설명 된 바와 같이, 비동기 기능은 여전히 ​​개별적으로 실행되고 있기 때문이다. 당신은 다르게 생각해야합니다. 이 경우, 작업이 완료된 후에 console.log가 발생하도록 설정해야합니다.

+0

Err 예, 잠시 동안 문서를 확인하지 않았지만 성공했습니다. 요즘 멋진 점은 콜백에 대한 아이디어를 얻는 것이 중요하다는 것입니다. –

+0

문제는 내가'doneCB (true)'를 호출 할 때'undefined is not function'을 얻게된다는 것입니다. – Alex

+0

잘, del_act에 매개 변수로 doneCB를 전달해야합니다. –

1

변수를 아약스 호출에서 전송할 수 없습니다.

당신이 무엇을해야하는 대신,/성공 내부 함수를 호출 즉 참 또는 거짓의 값을 전달 실패하고 그 참/거짓 출력에 따라 행동 함수 내에 코드를 삽입하는 것입니다

+0

제안 사항의 문제점은 'var'를 선언해야하므로 조금 혼란 스러울 것입니다. resp'를 모든 스크립트의 시작점에서 찾은 다음 값을 설정하고 검색하십시오 ... 어떻게 생각하니? – Alex

-1
jqXHR 

자체가 객체이고 콘솔에 직접 쓰면 정의되지 않거나 객체가 출력됩니다.
서버에서 오는 응답이 실패 이벤트 발생 이후 올바르지 않은 것으로 보입니다.
유효한 JSON 데이터가 반환되는지 확인하십시오.

문제를 더 잘 볼 수 있도록 링크를 게시해야합니다.

+1

이것은 전혀 문제가되지 않습니다. –

관련 문제