2012-03-07 3 views
0

제출 이벤트를 포착하는 양식이 있습니다. 제출 여부를 결정하려면 $.post 전화를 기다려야합니다. 나는 이것을 시도했다 :동기 코드가 비동기 호출을 대기하게합니다.

$('#my_form').submit(function(event){ 
    var data = null; 

    $.post("/post/call").then(function(_data){ 
    data = _data; 
    }); 

    if ($.isPlainObject(data) && data.status === 'ko') { 
    return false; // Do not submit the original form 
    } else { 
    // Submit the original form 
    } 
}); 

그러나 data 결과 _data가 valorized되고 또한 경우, 항상 null로, $.post는 asynchrounous 호출이기 때문이다. $.post 통화가 완료 될 때까지 어떻게 기다릴 수 있습니까?

편집 : 의견에 쓴대로, 나는 페이지를 정지하기 때문에 $.ajax({async: true})을 피하고 싶습니다. 페이지를 동결하지 않고 동일한 효과를 얻으려면 어떤 방법이 있습니까?

+0

중복 가능성 (http://stackoverflow.com/questions/2942544/synchronous-calls- 설정 될 수 비동기 with-jquery) –

+0

마지막 비동기 콜백에서 기다려야 할 것을 넣지 않는 이유는 무엇입니까? – Danny

+0

어디에서 얻을 수 있나요? .then(). 콜백 함수는 게시물에 쉼표로 첨부됩니다. 게시물이 완료되기 전에 데이터가 설정되지 않았기 때문에 if가 콜백에 있어야합니다. –

답변

2

양식 제출 여부와 아약스가 처리 중임을 나타내는 플래그가 있어야합니다. 그런 다음 아약스 호출이 통과되면 $('#my_form').submit()으로 전화하여 양식을 보냅니다. 느슨하게

,

var validated = false; 
$('#my_form').submit(function(event){ 
    if (validated) { 
     return true; 
    } 


    $.post("/post/call").then(function(_data){ 
    var data = _data; 

    if ($.isPlainObject(data) && data.status === 'ko') { 
     // Do not submit the original form 
    } else { 
     validated = true; 
     $('#my_form').submit(); 
    } 
    }); 

    return false; 
}); 
+0

나는 그것을 좋아한다. 고맙습니다! – mdesantis

+0

통화가 진행 중인지 여부를 나타내는 다른 플래그를 추가해야합니다. –

0

당신이 MVC/C#을 사용하고, 다음을 웹 서비스에 액세스 알아야 할 JSON 요청을 사용 할 수 있습니다.

$.getJSON 

SOLUTION: $.ajax 

가 [동기식 jQuery로 호출]의 동기

관련 문제