function nums(){
var n = document.natform.num.value;

var url="index.php?c=nat&a=natid&id="+n+"";
if(n == ''){
document.getElementById('num').style.display='block';
document.getElementById('num').innerHTML='编号不能为空';
document.getElementById('num').style.color='red';
return false;
}else{
xmlHttpRequest = createXmlHttpRequest();
xmlHttpRequest.onreadystatechange = handle;
xmlHttpRequest.open("GET",url,true);
xmlHttpRequest.send(null);
                        //我的问题就是 在这个else里怎么接收到 handle()的返回值(true  false)
}

}
function handle(){
if(xmlHttpRequest.readyState == 4){
var re = xmlHttpRequest.responseText;
if(re){
document.getElementById('num').style.display='block';
document.getElementById('num').innerHTML='编号已存在';
document.getElementById('num').style.color='red';
return false;
}else{
document.getElementById('num').style.display='block';
document.getElementById('num').innerHTML='可以使用';
document.getElementById('num').style.color='green';
return true;
}

}
}
以上是一个ajax 判断 id 是否存在的,  如果不存在,可以提交,如果存在提示已存在,不能提交    function saves(){
if(nums()){
document.natform.action="index.php?c=nat&a=addnatpost";
                document.natform.submit();
}
}但是现在问题是   num() 接收不到 handle() 的返回值, 所以已存在的时候 num() 状态是未定义的, 请教下这块怎么改

解决方案 »

  1.   


     var re = xmlHttpRequest.responseText;    //这里的re值是多少?alert看看。
    //如果没有值,说明是后端接收处理的问题如果在else中的回调函数handle没有执行,这样试试: xmlHttpRequest = createXmlHttpRequest();
                xmlHttpRequest.onreadystatechange = function(){
           if(xmlHttpRequest.readyState == 4){    
                var re = xmlHttpRequest.responseText;
                if(re){
                    document.getElementById('num').style.display='block';
                    document.getElementById('num').innerHTML='编号已存在';
                    document.getElementById('num').style.color='red';
                    return false;
                }else{
                    document.getElementById('num').style.display='block';
                    document.getElementById('num').innerHTML='可以使用';
                    document.getElementById('num').style.color='green';
                    return true;
                }
                
            }    
    };
                xmlHttpRequest.open("GET",url,true);
                xmlHttpRequest.send(null);
      

  2.   

    ajax 是异步通讯方式,所以你不可能从 num() 得到正确的返回值
    你所需要的提交动作应在 handle 中完成
      

  3.   


    //他妹的ajax
    var xmlHttpRequest;
    function createXmlHttpRequest(){
    if(window.ActiveXobject){
    return new activexobject("Microsoft.XMLHTTP");
    }else if(window.XMLHttpRequest){
    return new XMLHttpRequest();
    }
    }
    function nums(){
    var n = document.natform.num.value;

    var url="index.php?c=nat&a=natid&id="+n+"";
    if(n == ''){
    document.getElementById('num').style.display='block';
    document.getElementById('num').innerHTML='编号不能为空';
    document.getElementById('num').style.color='red';
    return false;
    }else{
    xmlHttpRequest = createXmlHttpRequest();
    xmlHttpRequest.onreadystatechange = handle;
    xmlHttpRequest.open("GET",url,true);
    xmlHttpRequest.send(null);
    }
    }
    function handle(){
    if(xmlHttpRequest.readyState == 4){
    var re = xmlHttpRequest.responseText;
    if(re){
    document.getElementById('num').style.display='block';
    document.getElementById('num').innerHTML='编号已存在';
    document.getElementById('num').style.color='red';
    return false;
    }else{
    document.getElementById('num').style.display='block';
    document.getElementById('num').innerHTML='可以使用';
    document.getElementById('num').style.color='green';
    return true;
    }

    }
    }我发一下 完整的代码, 直接掉 handel() 会说xmlHttpRequest 未定义..
      

  4.   

        function handle(){
            if(xmlHttpRequest.readyState == 4){    
                var re = xmlHttpRequest.responseText;
    ....
                }else{
                    document.getElementById('num').style.display='block';
                    document.getElementById('num').innerHTML='可以使用';
                    document.getElementById('num').style.color='green';            document.natform.action="index.php?c=nat&a=addnatpost";
                        document.natform.submit();
                }
                
            }    
        }
      

  5.   

    灰常感谢 我整明白了, xmlHttpRequest = createXmlHttpRequest(); 我把这句拿出来了