【发布时间】:2015-06-16 11:22:16
【问题描述】:
这是我的示例代码。 (我需要发送同步请求的原因是实际上我需要发送几个请求,每个请求取决于前一个请求的响应。我需要设置回调的原因是我想显示一些微调器,以便用户知道状态脚本。)
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() 拆分为多个函数,使用短计时器的回调从一个到下一个。
-
为什么在同步请求中使用回调?你为什么要使用 SJAX? (这就是为什么你的颜色变化不起作用的原因)
-
我使用回调是因为我想显示一些微调器,以便用户知道脚本的状态。我需要发送同步请求,因为实际上我需要发送多个请求,每个请求取决于前一个请求的响应。