2010-07-21 73 views
2

我想知道在多個(無序)ajax調用完成之後觸發事件的最佳方法是哪種。在幾次ajax調用成功後觸發事件

爲了讓它更清晰些,我想調用一個Method doSomethingGreat(),它會觸發幾個ajax調用,這些調用的順序不必要。當所有這些調用都成功時,我只想觸發一個事件'SomethingGreatFinished'。我也不想將這些調用鏈接起來,因爲那樣會缺乏性能,並且完全違背異步編程的思想。

我想知道a)是否有一個共同的模式,b。)這可以通過JavaScript的Reactive Extensions(RxJs)或c。)來完成,並具有原生的jQuery特性。

任何幫助表示讚賞!

+0

IIRC,你只能有最多兩個同時HTTP請求到同一臺服務器。當然,兩個並行比一個一個更好,所以你是正確的問這個問題,但要注意你不會得到7個併發的ajax調用。 – nickf 2010-07-21 07:20:23

+0

哦,我明白了。我不知道。 – Christoph 2010-07-21 08:20:08

+0

關於同時請求的最大數量的好處,但如果我沒有記錯,這是一個瀏覽器設置,並且一些瀏覽器使用不同的值。 http://weblogs.asp.net/mschwarz/archive/2008/07/21/internet-explorer-8-and-maximum-concurrent-connections.aspx – belugabob 2010-07-21 10:24:47

回答

3

RxJS將允許您使用ForkJoin運算符執行此操作,此運算符將N個observables與一個值相關聯,並創建一個observable,並在所有N個observable結束時創建一個與數組一起觸發的observable。

見太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 2010-07-23 04:04:52

0

如果您知道正在進行多少次呼叫,請將變量設置爲該號碼,並在每次發生AJAX完成事件時將其減少一次。當變量達到零時,'SomethingGreat'發生了。

+0

這就是我現在所做的,但我認爲必須有一個更好的方式來實現它。也許用JS的Reactive Extensions? – Christoph 2010-07-21 08:19:33

1

你應該看看.ajaxStop()

但是,該callback將啓動每個完成的ajax請求。因此,爲了知道您的最後一次請求是否完成,您需要調用.ajaxStart(),或者您需要爲每個請求重複執行global variable,並且您需要爲每個請求重複執行global variable,並且需要對.ajaxStop()重複執行decrement。如果該變量達到zero,您的所有請求都已完成。