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 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿