2013-02-15 3 views
1

제 스크립트가 여러 개의 ajax 요청을 처리해야합니다.여러 아약스 요청을 처리하는 방법은 무엇입니까?

function request(variable){ 
    $.ajax({ 
     // call config 
    }).done(function(data){ 
     // treatment of returned data 
     // returning TRUE (ok) or FALSE (errors) 
    }).fail(function(e){ 
     // generating error message 
    }); 
} 

내가 여러 통화를해야합니다 : 여기에 단순화 된 버전입니다

request(variableA); 
request(variableB); 
request(variableC); 

요청을 동시에 수행하고 잘 작동하지만 프로세스가 완료되면 나도 몰라한다. 그리고 반환 된 값을 표시 할 수 없습니다.

일부 토론에서는()을 사용하는 것이 좋습니다.

$.when(request(variableA), request(variableB), request(variableC)) 
    .done(function(resultA, resultB, resultC) { 
     alert("Finished!"); 
     //results available 
    }); 

이 코드를 사용하여 경고

내 최선의 선택은 무엇 일 것입니다 ... 공정 대신에 완료를 기다리지의 시작에서 수행 할 것으로 보인다? 그들이 (따라서 AJAX의 A) 비동기 때문에

답변

4

변경 request는 약속

function request(variable){ 
    return $.ajax({ 
     // call config 
    }).done(function(data){ 
     // treatment of returned data 
     // returning TRUE (ok) or FALSE (errors) 
    }).fail(function(e){ 
     // generating error message 
    }); 
} 
+1

명확히하기 위해 이렇게하면'$ .when'을 사용하는 코드가 제대로 작동합니다. :) –

+0

감사합니다. 나는 처음에는 그것을 얻지 못했습니다 ... – Yako

2

에게() 호출 즉시 어쨌든 반환 이러한 요청을 반환합니다. 모든 요청이 완료되면 요청을 함께 묶고 실행 만 완료하려면 개별 Ajax 호출의 성공 처리기가 카운터를 증가시킨 다음 카운터가 특정 시점에 도달하면 "진행"코드 만 호출해야합니다. 예 :

이 기능은 그대로 작동하지 않지만 아이디어를 제공해야합니다. 3 개의 paralle 요청을 호출해야 할 경우 각 요청에 3을 전달하고 세 번째 결과가 마침내 나오면 성공 핸들러의 해당 특정 인스턴스는 코드가 진행되는 모든 기능을 호출합니다.

약간의 개선점은 성공 처리기에 대한 클로저를 정의하여 request() 함수에 전달하는 것이므로 하드 코드 된 "진행"함수 호출이 없지만이 범위를 벗어납니다 대답.

+0

anwser에 감사드립니다. 사실 연기 된 객체를 이해할 수 없으므로 카운터 솔루션으로 방향을 전환하고 있었고 솔루션이이 관점에서 효과적이었습니다. 그러나 무사의 옵션을 선호합니다. 그것은 jQuery로 더 가볍고 최적입니다. – Yako

관련 문제