Как работает синхронный AJAX-запрос jQuery? - PullRequest
3 голосов
/ 14 августа 2010

Использует ли jQuery.ajax({async: false}) все еще объект XMLHttpRequest?

Если да, то как синхронный запрос?

Есть ли какой-то механизм внутри определения функции, позволяющий выполнить асинхронный запросXHR, чтобы быть обернутым в синхронную оболочку?

Я спрашиваю, потому что я хочу обернуть асинхронные вызовы функций в синхронную оболочку.1013 * Я хочу сделать это для зависимостей.Мне не нужно больше ничего запускать до тех пор, пока не загрузятся все сценарии внешней зависимости, однако я бы предпочел не загружать каждый из файлов синхронно.

По сути, я хочу это:

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.

1 Ответ

1 голос
/ 14 августа 2010

Использует ли jQuery.ajax({async: false}) объект XMLHttpRequest?

Да.

XMLHttpRequest.prototype.open принимает async в качестве своеготретий параметр.Если это правда (по умолчанию), запрос является асинхронным.В противном случае это синхронно.

Я спрашиваю, потому что хочу обернуть вызовы асинхронных функций в синхронную оболочку.

Почему вы хотите это сделать?Это, скорее всего, приведет к большему количеству проблем, чем "исправит".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...