2010-08-14 35 views
3

jQuery.ajax({async: false})仍然使用XMLHttpRequest對象嗎?jQuery的同步AJAX請求如何工作?

如果是這樣,請求如何同步?

有剛剛函數定義,允許由XHR推出異步請求被包裹在一個同步封裝內部的一些機制?

我問,因爲我想將異步函數調用包裝到同步包裝中。

編輯

我想爲依存關係做到這一點。在加載所有外部依賴腳本之前,我不需要運行任何操作,但是,我寧願不同步加載每個文件。

基本上,我想這樣的:

require(['lib1.js','lib2.js']) 

Library1Function(); 
Library2Function(); 

要直到兩個被加載的同時加載LIB1和LIB2,但塊。

我知道我可以用一個回調做到這一點,但是還是不行,如果我包括文件也包括以同樣的方式依賴。

EDITx2

之所以回調不工作:

# lib2.js 
window.Library2Function = function(input) { 
    alert(input); 
} 

# lib1.js 
require('lib2.js', function() { 
    window.Library1Function = function() { 
    window.Library2Function('Hi there'); 
    } 
}); 

# main.js 
require('lib1.js', function() { 
    window.Library1Function(); 
}); 

的問題是,在main.js,該回調將得到被紅牌罰下一旦lib1.js加載和運行。 問題是,Library2Function直到加載lib2.js纔會實際定義,發生後解析了lib1.js。

+0

你能解釋'你的同步包裝'是什麼意思,你爲什麼需要它? – strager 2010-08-14 04:36:31

+0

在您的編輯:爲什麼不回調工作?你能澄清一點嗎? – strager 2010-08-14 04:42:25

+0

請參閱第二編輯。 – 2010-08-14 04:47:33

回答

1

是否jQuery.ajax({async: false})仍然使用XMLHttpRequest對象?

是的。

XMLHttpRequest.prototype.open接受async作爲其第三個參數。如果它是真的(默認),請求是異步的。否則,它是同步的。

我問,因爲我想將異步函數調用包裝到同步包裝中。

你爲什麼要這麼做?這很可能會導致比「修復」更多的問題。

+0

請參閱編輯 - 我可能會接受您的答案,並將其轉移到另一個問題。 – 2010-08-14 04:41:57