2012-02-14 134 views
0

我有幾個XHR請求,它們是由Mootools Request類處理的。這門課提供了一些選項來適當地處理請求。我在做什麼:Mootools XHR請求:同步和/或鏈接?

  1. XHR:郵政表單數據
  2. XHR:刷新主窗格
  3. XHR:刷新subpane

當然,要求2 & 3必須等待前1完了。所以這些在onComplete事件處理程序中被觸發。但是,Request類提供了處理多個XHR請求的選項。我的問題是關於這兩個:

  1. link可以設置爲chain,以「鏈」它們,或者,作爲武文檔狀態的選項:

    作出啓動任何電話而請求正在運行時會被鏈接起來,並且會在當前請求結束後立即發生。

  2. 選項async可以設置爲false,以防止以後的請求的執行。根據Moo文​​檔:

    如果設置爲false,請求將在請求期間同步並凍結瀏覽器。

除了瀏覽器凍結的部分,究竟是什麼區別?我應該使用哪一個請求否。 1?同步執行它會更好嗎,所以我確定在此期間沒有其他任何執行?如何使用兩者,這是否有意義?

回答

4

好。 link:chain和async:false之間的區別很簡單。

第一個公理 - 你是重複使用你的請求實例,而不是一個新的公理。即使你不是,它也可以使用異步。例如,如果你有async: false,那麼這段代碼:

new Request({async:false}).send(); 

// this one below will not run until the UI thread has finished 
new Request({async:false}).send(); 

// nor will this 
somefunc(); 

如果用鏈去:

var req = new Request({link: "chain"}); 

req.send(); 
// this won't run until the previous request has completed: 
req.send(); 
// this will run independently of the above and may finish first as 
// they are not synchronous and this is a brand new instance. 
new Request().send(); 
+0

感謝這個見解;我沒有意識到鏈接與實例相關的事實 - 它沒有考慮到其他實例。基於此,我認爲同步發佈內容是我最安全的選擇,因此可能觸發另一個請求的延遲請求不會在中間。 – kasimir 2012-02-14 16:53:13

+0

或重用您的請求實例。你也可以設置鏈接:「取消」,以確保只有一個onComplete最終會觸發 - 但它不能阻止多個POST/GET請求。 – 2012-02-14 17:14:13

+0

我想我可能會重用一些請求實例,但就發佈而言,我認爲同步進行更加「不錯」,而其缺點(干擾瀏覽器)並不是那麼大,考慮到我實際上希望將所有內容在發佈發佈時暫停(並且在其中'狀態'如此說,改變)。 – kasimir 2012-02-15 08:30:22

0

被鏈接的請求是異步的,當一個請求結束時它會觸發第二個請求等等,這樣你就可以有幾個請求,而不會同時堵塞瀏覽器和所有的請求。

鏈接的請求不會凍結您的瀏覽器。