2010-07-21 6 views
2

몇 가지 (순서가없는) 아약스 호출이 완료된 후 어떤 이벤트를 트리거하는 가장 좋은 방법인지 궁금합니다.여러 아약스 호출 성공 후 트리거 이벤트

좀 더 명확하게하기 위해 doSomethingGreat() 메서드를 호출하여 여러 아약스 호출을 트리거합니다. 이러한 호출은 불필요한 순서가 필요하지 않습니다. 나는 그 모든 호출이 성공했을 때 'SomethingGreatFinished'이벤트를 트리거하려고합니다. 또한 이러한 호출을 체인화하고 싶지 않습니다. 성능이 떨어지며 비동기 프로그래밍에 반대 할 것이기 때문입니다.

a) 공통 패턴이 있습니다. b) 네이티브 jquery 기능이있는 Reactive Extensions for JavaScript (RxJs) 또는 c)를 사용하여 수행 할 수 있습니다.

도움을 주시면 감사하겠습니다.

+0

IIRC, 당신은 같은 서버에 두 개의 동시 HTTP 요청의 최대 수 있습니다. 물론 병렬로 진행되는 두 개가 병렬로 진행되는 것보다 낫습니다. 따라서이 질문을하는 것이 옳지 만 아약스 동시 호출은 7 회 발생하지 않습니다. – nickf

+0

아, 알겠습니다. 나는 그것을 몰랐다. – Christoph

+0

최대 동시 요청 수에 대한 좋은 지적이지만, 올바르게 기억한다면 이것은 브라우저 설정이며 일부 브라우저는 다른 값을 사용합니다. http://weblogs.asp.net/mschwarz/archive/2008/07/21/internet-explorer-8-and-maximum-concurrent-connections.aspx – belugabob

답변

3

RxJS를 사용하면 ForkJoin 연산자를 사용하여이 작업을 수행 할 수 있습니다.이 연산자는 N 개의 관측 값을 값으로 사용하고 N 개의 관측 값이 모두 완료되면 배열로 시작하는 하나의 관측 가능을 만듭니다.

이 연산자에 대한 마태 복음 Podwysocki의 블로그 게시물 : http://codebetter.com/blogs/matthew.podwysocki/archive/2010/04/23/introduction-to-the-reactive-extensions-for-javascript-going-parallel-with-forkjoin.aspx

+0

정확히 그게 내가 찾고 있던 것 같아 .-) – Christoph

0

통화가 몇 건인지 알면 해당 번호로 변수를 설정하고 AJAX 완료 이벤트가 발생할 때마다 감소시킵니다. 변수가 0에 도달하면 'SomethingGreat'가 발생했습니다.

+0

지금까지 내가 한 일이지만, 그것을 성취하는 더 좋은 방법. 아마 Reactive Extensions for JS가 있을까요? – Christoph

1

너는 .ajaxStop()을 봐야한다.

그러나 완료되면 모든 단일 아약스 요청시 callback이 실행됩니다. 따라서 의 요청이 완료 될 때 요청이 완료되면 .ajaxStart()을 호출하거나 발동 요청마다 global variable을 반복해야하고 decrement.ajaxStop()에 반복해야합니다. 변수가 zero에 도달하면 모든 요청이 완료되었습니다.

관련 문제