2011-09-28 4 views
3

나는 잠시 동안 AJAX로 작업 해왔다.하지만 제한적이고 간단한 방법으로. 나는 JQuery를 사용한다.AJAX 비동기 응답 콜백

현재 웹 애플리케이션을 디버깅 중이다. 클라이언트 측 코드는 JavaScript 및 JQuery를 사용합니다. 나는이 애플리케이션에서 동시에 여러 AJAX 요청을 보내는 것이 가능하다는 것을 알아 차렸다. 내 관심은 AJAX가 비동기 적이기 때문에 AJAX 요청이 올바른 순서로 완료되지 않을 수 있기 때문입니다.

는 제가 2가

정교한하자 AJAX는 요청와 B 모두 적절한 AJAX 콜백이 마녀 응답에 관계없이 실행됩니다 경우 내가 먼저 반환됩니다 궁금하거나 콜백 기능은 FIFO 방식으로 실행된다 그리고 B는 콜백 기능을 가지고 있습니다. 응용 프로그램은 먼저 요청을 한 다음 바로 다음에 요청을합니다. 이제 응용 프로그램은 A가 처음으로 돌아올 것으로 예상합니다. 이제 제 질문은 B가 처음으로 돌아 오면 어떻게 될까요? 어떤 콜백이 실행됩니까?

약간의 연구를했으며이 문제에 대한 정보를 찾을 수 없었습니다. 그래서 나는 브라우저가 콜백을 조정할 것이라고 생각했다. 내가 작은 시험을 썼는지 확인하기 위해서. 내 테스트에 따르면 어떤 응답이 먼저 반환되는지에 상관없이 항상 콜백되는 첫 번째 요청이 항상 먼저 사용됩니다.

제 질문은 어떤 행동입니까? 또한 어떤 기술이나 방법이 이러한 경우를 피하기 위해 사용됩니다.

답변

4

jQuery 약속/지연 객체를 보면 이러한 정확한 동작을 제어 할 수 있습니다. 요청 B가 먼저 반환하는 경우, 다음의 콜백이 처음 호출 될 것이다 - 당신이 흐름을 같이

$.when($.ajax("test.aspx")).then($.ajax("test2.aspx")); 

http://api.jquery.com/category/deferred-object/

+0

+1이 큰 물건입니다 : 예를 들어 첫 번째 suceed이 때

당신은 항상 두 번째 아약스 요청을 호출 할 수 있습니다. 기타 문서 : http://api.jquery.com/jQuery.when/ –

+0

http://www.erichynds.com/jquery/using-deferreds-in-jquery/ – BNL

2

.

function callbackA() { return true; } 
function callbackB() { return true; } 

$.ajax({url: '/my/url', data: {mydata: mydata}, success: function(data) { 
     callbackA(data); 
     $.ajax({url: '/my/url2', data: {mydata2: mydata2}, success: function(data) {} 
      callbackB(data); 
    }); 
}); 
+0

두 번째 생각에 이것은 아마도 가장 간단한 해결책 일 것입니다 . –