2010-08-14 17 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