日期:2014-05-16  浏览次数:20499 次

关于异步任务排队被阻塞的解决办法
我在弄一个javascript的任务排队,排队中的执行返回是异步的,我要让一个任务依次执行,所以用了while ()来等待之前的一个执行返回。但是这样出现的阻塞,看了点文章,javascript是单线程的,然后也看了settimeout 和 setinterval 介绍。但还是迷茫,这该怎么解决。
类似代码是这样的:


var isOK = true;

function createXmlHttpRequest(){  
 if(window.ActiveXObject){ //如果是IE浏览器  
return new ActiveXObject("Microsoft.XMLHTTP");  
 }else if(window.XMLHttpRequest){ //非IE浏览器  
return new XMLHttpRequest();  
 }  
 }
 
var xmlReq = createXmlHttpRequest();//创建一个xmlhttprequest对象

function testAsynRequest() {
var url = "http://xxx.com/test.ashx?ajax=xxuusks";
xmlReq.open("post", url, true);
xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlReq.onreadystatechange = function () {
if (xmlReq.readyState == 4) {
if (xmlReq.status == 200) {
var jsonData = eval('(' + xmlReq.responseText + ')');
alert(jsonData.message);
}
else if (xmlReq.status == 404) {
alert("Requested URL is not found.");
} else if (xmlReq.status == 403) {
alert("Access denied.");
} else {
alert("status is " + xmlReq.status);
}
}
isOK = false;
};
xmlReq.send(null);
}

testAsynRequest(); //这里始终没有被响应
while (isOK) { } //这里被先执行了
alert("完成继续下一个执行");

------解决方案--------------------
回调哦,对哦,请问楼主知道什么是回调吗?
------解决方案--------------------
看看下面的例子你用得到吗
		<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function task1(){
$.ajax({url:"",
success:function(){
alert("task1 异步success完成,点击后执行下一项任务");
doOne();
}
});
}
function task2(){
$.ajax({url:"",