Вот мой пример кода. (Причина, по которой мне нужно отправлять синхронные запросы, состоит в том, что на самом деле мне нужно отправить несколько запросов, и каждый запрос зависит от ответа предыдущего запроса. И причина, по которой мне нужно установить обратные вызовы, заключается в том, что я хочу показать некоторый счетчик, так что пользователи знают статус сценария.)когда будет выполняться обратный вызов для синхронных вызовов xmlHttpRequest?
var xmlhttp =new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==2) {
document.getElementById("p2").style.color = "blue"; //statment 1
}
if (xmlhttp.readyState==4) {
document.getElementById("p2").style.color = "red"; //statment 2
}
}
xmlhttp.open("GET","ajax_info.txt",false);
xmlhttp.send();
balblabla(); // a time-cost function
Тогда у меня есть 2 вопроса. Во-первых, когда оператор 1 и оператор 2 фактически выполняются? Гарантируется ли выполнение перед balblabla()?
Во-вторых, даже если инструкция 1 и инструкция 2 выполняются, кажется, браузер не изменит отображаемый цвет до тех пор, пока не будет закончен blablabla(). Есть ли способ сделать изменение цвета отображаемым до того, как blablabla() закончил? (предполагается, что blablabla() занимает много времени)
Спасибо!
1) TIAS! 2) Нет, но вы можете разделить blablabla() на несколько функций, используя обратный вызов с коротким таймером для перехода от одного к другому. – ikegami
Почему вы используете обратные вызовы вообще в запросе на синхронизацию? И почему вы используете SJAX? (вот почему ваши изменения цвета не работают) – Bergi
Я использую обратные вызовы, потому что хочу показать какой-то счетчик, так что пользователи знают статус скрипта. Мне нужно отправить синхронные запросы, потому что на самом деле мне нужно отправить несколько запросов, и каждый запрос зависит от ответа предыдущего запроса. – user3462510