“可恶”的ajax 同步请求
因为这个原因,浪费了我好几个小时.
在工作中碰到这样的需求:
后续的方法必须等待前置任务完成后方可去执行,否则后续方法无法取到前置任务生成的数据.
而前置任务当中使用到了ajax请求向后台请求一些数据,供后续方法使用.
开始的想法:
function load(){
前置任务(); //使用了ajax请求,并设置了异步为false.
后续任务(); //读取前置任务返回的数据
}
现象:
FF:一切正常,偶尔有点小问题,得到不到数据
IE:无法获取数据
总结原因:
对ajax的同步请求,与程序的中断概念不清.
ajax的同步请求,并不会中断当前程序的运行.
解决方案:
//定义一全局变量,数量为当前页面共发出的ajax请求数量 var requestCount = 1; function load() { /* 使用了ajax请求,并设置了异步为false. 在ajax回调函数中,将requestCount-- 确保所有请求数据最后为0; */ 前置任务(); //执行后续方法 latter(); } function latter() { /* 如果请求数量为0,代表当前所有ajax请求已完成 那可以进行后续任务,否则使用定时器,每隔500毫秒 去重新执行一次这个方法 */ if (requestCount == 0) { //读取前置任务返回的数据 后续任务(); }else{ window.setTimeout("latter()",500); } }