jQuery的同步AJAX请求如何工作?

时间:2010-08-14 04:11:56

标签: asynchronous jquery

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

如果是,请求如何同步?

函数定义中是否只有一些机制允许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,该回调就会被发送掉。 问题是,在加载lib2.js之前,实际上并没有定义Library2Function,这在解析了 lib1.js之后发生

1 个答案:

答案 0 :(得分:1)

  

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

XMLHttpRequest.prototype.open接受async作为其第三个参数。如果是真(默认),则请求是异步的。否则,它是同步的。

  

我问,因为我想将异步函数调用包装成同步包装器。

你为什么要这样做?这很可能导致比“修复”更多的问题。