Вы можете превратить ваш запрос в функцию, которая принимает функцию callback
. Эта функция вызывается всякий раз, когда запрос завершается, и ваш код будет продолжаться с полученными данными.
function request(url, callback) {
const xhr = new XMLHTTPRequest();
xhr.addEventListener('readystatechange', function(event) {
if (xhr.readyState === 4 && xhr.status === 200 && typeof callback === 'function') {
callback(xhr.responseText);
}
});
xhr.open('GET', url, true);
xhr.send();
}
Это будет работать так с вложенными обратными вызовами и может быть перетасовано в любом порядке, который вы захотите.
request('request-a', function(dataA) {
// Request A has finished here.
// Now start request B.
// dataA is the xhr.responseText value.
request('request-b', function(dataB) {
// Request B has finished here.
// Now start request C.
request('request-c', function(dataC) {
// Request C has finished here.
});
});
});
Это самый простой способ сделать ваш запрос многоразовым и действовать, когда ваш запрос был завершен. Более современный подход заключается в использовании Fetch API , который является интерфейсом, основанным на обещаниях, который делает то же самое, что и XMLHTTPRequest
. Обязательно проверьте это.