您的位置:首页 > 理论基础 > 计算机网络

关于Microsoft.XMLHTTP或Ajax中异步获取数据的问题

2011-07-08 15:38 686 查看
相信对于如下代码都很熟悉。

function getData(url,obj)
{
var xh;
xh = new ActiveXObject("Microsoft.XMLHTTP");
xh.onreadystatechange = function(){
if(xh.readyState==4)
{
if(xh.status==200){
return xh.responseText;
}
else{
return '';
}
}
}
xh.open("GET", url+"?direct=wk2d&d="+obj.value, false);
xh.send();
}可是不管里面怎么调整它,里面使用Ajax或者XMLHTTP对象来异步获取数据,我们会发现在调用getData("aa.asp",object1)时,发现返回的值总是undefined。
这个是因为异步获取数据导致的问题,在程序中调用getData()函数,在xh发出send指令后,程序并不会等待返回结果而阻塞,而是立刻继续执行主程序中接下来的内容,这个时候主程序如果想使用getData的返回值,很可能就是undefined,因为这个时候xh对象可能还在发送请求和等待响应中,不能及时给出getData的返回值。
那怎么来解决这个问题? 可以想办法在主程序中在执行了getData函数后,就将程序阻塞直到得到返回值。修改后的代码如下:

var data;
var got;
function getDateURL(url,obj)
{
var xh;
got=false;
xh = new ActiveXObject("Microsoft.XMLHTTP");
xh.onreadystatechange = function(){
if(xh.readyState==4)
{
if(xh.status==200){
data=xh.responseText;
got=true;
}
else{
data='';
got=true;
}
}
}
xh.open("GET", url+"?direct=wk2d&d="+obj.value, false);
xh.send();

}

而js主程序中加入阻塞内容:
getData("aaa.asp",object);
while(!got){
; //这里就可以将程序阻塞直到got为true代表获取到数据。
}
value=data;
希望有用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: