关于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;
希望有用。
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;
希望有用。
相关文章推荐
- 使用fetch/XMLHttpRequest/JQ Aajax获取数据
- XMLHTTPRequest对象进行AJAX的异步数据交互
- 关于Ajax中XMLHttpRequest对象的status属性值问题
- jQuery的ajax()检验用户名;通过jQuery的load()/get()/post()方法实现;使用XMLHTTPRequest对象来进行AJAX的异步数据交互
- 关于解决无法获取AJAX中无法获取XML返回的问题
- 关于XMLHTTP无刷新数据获取和发送
- ajax xmlhttprequest使用post传参数并向后台获取数据
- XmlHttp异步获取网站数据的例子(孟子E章)
- AJAX和SOAP——异步数据和XML获取
- XmlHttp异步获取网站数据的例子
- XMLHTTP异步获取返回值的代码超时测试(AJAX)
- 使用xmlhttprequest对象来进行AJAX的异步数据交互
- AJAX之XMLHTTP无刷新数据获取和发送各种方法汇总
- 关于使用AJAX获取数据时,由于IE缓存而导致数据不更新,串数据的问题!
- AJAX和SOAP——异步数据和XML获取
- 关于Microsoft.xmlhttp send 永无响应的奇怪问题
- 关于XMLHTTP无刷新数据获取和发送(转相关内容)
- 关于XMLHTTP无刷新数据获取和发送 (转)
- IT新技术名词:AJAX和SOAP——异步数据和XML获取
- AJAX和SOAP——异步数据和XML获取