Нужно дождаться завершения XMLHttpRequest

Всякий раз, когда я пытаюсь найти ответ на этот вопрос, все ссылаются на запуск / остановку AJAX и т.д.

Я использую XHI JS функцию XHR для междоменных вызовов, теперь я хочу именно так

callMyXHRfunction();
callNextFunctionWhenAboveFunctionResponded();

то есть я должен двигаться вперед до тех пор, пока моя функция xhr не ответит (либо успех, либо неудача)

Обновить

Случай использования:

Есть функция с именем getAllData(), эта функция получает все мои текущие данные, отправленные на сервер. Мне нужно часто вызывать эту функцию, чтобы получить последние данные и двигаться вперед. Во время входа в систему я вызываю эту функцию для получения последних данных, и через каждые 10 минут мне нужно вызывать эту функцию для обновления данных.

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

Надеюсь, теперь все хорошо понимают мою ситуацию.

2 ответа

Смотрите третий пример на сайте, на который вы ссылаетесь:

x$( selector ).xhr( url, fn );

Вторым аргументом может быть обратный вызов, обратный вызов - это ключевое слово, которое вы, вероятно, искали для начала.

В качестве альтернативы используйте синхронный вызов, предоставив async: false как вариант.

x$("body").xhr("http://the-url",{ async: false });

Поток управления будет приостанавливаться до тех пор, пока не вернется запрос, и только после этого перейдет к следующей функции. См. http://jsfiddle.net/ZQ9uw/ для справки.

Вам нужно сделать .xhr Вызовите таким образом, чтобы указать функцию обратного вызова и передать в качестве функции обратного вызова вашу "следующую" функцию.

Так что вы бы написали это так:

callMyXHRFunction(nextFunctionToCall); // no parens after nextFunctionToCall!

function callMyXHRFunction(callback) {
    $("something").xhr(url, {
        error: callback, // so that nextFunctionToCall is called on error
        callback: callback, // so that nextFunctionToCall is called on success
        async: true
        // add more options here
    });
}
Другие вопросы по тегам