CoderQ 2010-12-26 16:17
浏览 318
已采纳

Ajax的异步特性导致获取不到正确的数值,不知怎么处理

[code="javascript"]
function Ajax(url, params, method) {
this.url = url;
this.params = params;
this.method = method;
this.sResult = '';
//this.CallBackFaunction = cbf
this.CreateXmlHttp = function (){
var ajaxObj=null;
if(window.ActiveXObject)
{
ajaxObj=new ActiveXObject("Microsoft.XMLHTTP");
}else{
if(window.XMLHttpRequest){
ajaxObj=new XMLHttpRequest();
}
}
return ajaxObj;
}
this.Ajax = function(){
var xmlHttp = this.CreateXmlHttp();
var sResult = '';
var iReady = false;
xmlHttp.open(this.method,this.url,true);
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send(this.params);
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
sResult = xmlHttp.responseText;
iReady = true;
}
}
}

    return function(){
        while(iReady == false);
        return sResult;
    }();
}

}
[/code]

因为ajax是异步获取数据,而js是单线程执行,导致获取到的sResult总是为空,我了获取他,我这样写,但却死循环了,有谁能给点建议吗,谢谢!!!

  • 写回答

1条回答 默认 最新

  • iteye_1059 2010-12-26 20:33
    关注

    传入回调函数,函数包含入参responseText
    [code="javascript"]
    function Ajax(url, params, method, callback) {
    //...
    xmlHttp.onreadystatechange = function(){

    if(xmlHttp.readyState == 4){

    if(xmlHttp.status == 200){

    sResult = xmlHttp.responseText;

    callback(sResult);
    }

    }

    }
    }

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 数学的三元一次方程求解
  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题