Нужно дождаться завершения 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
});
}