#javascript #asynchronous #xmlhttprequest
#javascript #асинхронный #xmlhttprequest
Вопрос:
Вот мой js-код
function makeAsynchronousPostHttpCall(url, params, callback) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("POST", url, true); // false for synchronous request
xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlHttp.send(params);
xmlHttp.onreadystatechange = callback(xmlHttp);
return xmlHttp.responseText;
}
function fooBar() {
var url = foo;
var config = bar;
var params = "config=" config;
var callback = (xmlHttp) => {
console.log(xmlHttp.readyState);
if(xmlHttp.readyState == 1){
document.getElementById('progress').innerHTML = 'Request in Progress For ' config;
document.getElementById('completedMessage').innerHTML = "";
}
if (xmlHttp.readyState == 4 amp;amp; xmlHttp.status == 200) {
document.getElementById('progress').innerHTML = 'Request Completed For ' config;
document.getElementById('completedMessage').innerHTML = xmlHttp.responseText;
}
}
makeAsynchronousPostHttpCall(url, params, callback);
}
Все, что связано с запросом и ответом, работает нормально. Запрос выполнен успешно, и я получаю ожидаемый ответ. Но проблема в том, что мой обратный вызов «xmlHttp.onreadystatechange» запускается только один раз. т.е. в журнале консоли я смог найти только «1». Но тот же случай отлично работает, когда я использую синхронный вызов. Моя страница обновляется моим завершенным сообщением. Но при асинхронном вызове страница обновляется с помощью «Выполняется запрос для bar», но после завершения запроса я не вижу никаких дальнейших изменений на своей странице.
Есть ли какой-либо сбой при работе с асинхронным вызовом?
Спасибо!!
Комментарии:
1.
.onreadystatechange
должна быть функция — вы не устанавливаете ее как функцию…xmlHttp.onreadystatechange = () => callback(xmlHttp);
2. @JaromandaX, мне жаль, что я тебя не понимаю. Я назначил функцию var ‘callback’ и назначил ее xhr.onreadystatechange . что я делаю не так?
3.
xmlHttp.onreadystatechange = callback(xmlHttp);
callback(xmlHttp)
немедленно вызывает и присваивает значение, возвращаемое этой функциейxmlHttp.onreadystatechange
… есть разница между вызовом функции и (что вы и делаете) и ссылкой на функцию для присвоения чему угодно (что вам и нужно сделать)4. пример
var a = Math.random();
выполняетсяMath.random()
немедленно — ничем не отличается от того, что вы делаете5. @JaromandaX, да, это ошибка … Спасибо