发布Ajax函数以返回true或false

时间:2015-07-29 06:48:20

标签: javascript ajax

我正在尝试使用Ajax函数返回true或false(这是一种从另一个函数调用的验证函数)。因此,另一个函数需要从这个函数中获取真值或假值,以便它知道下一步该做什么

这是功能:

function validateLogin( uid, pass, i ){

        var uvalue = uid.value;
        var pvalue = pass.value;

        var xmlhttp;
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }

        xmlhttp.open("POST","validateCheck.php",true);
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        xmlhttp.onreadystatechange=function()
          {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {

                if( xmlhttp.responseText == "Error" )
                    return false;
                else if( xmlhttp.responseText == "Yes" )
                    return a;
                else if( xmlhttp.responseText == 1 )
                        return false;               
                else if( xmlhttp.responseText == 2 )
                        return false;
                else if( xmlhttp.responseText == 3 )
                        return false;
                else if( xmlhttp.responseText == 4 )
                         return false;
                else if( xmlhttp.responseText == 5 )
                        return false;
                else
                    return true;
            }
          }

          xmlhttp.send("uid="+uvalue+"&pass="+pvalue);  
    }

调用功能是:

function validateForm(i){
   var uid = document.myform1.username;
   var pass = document.myform1.password;

   if( validateLogin(uid,pass,i) )
        alert(validateLogin(uid,pass,i));

}

但是函数validateLogin没有向调用函数返回任何内容(validateForm)。

3 个答案:

答案 0 :(得分:1)

使用回调

function validateLogin(uid, pass, i, callback) {
    var uvalue = uid.value;
    var pvalue = pass.value;

    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.open("POST", "validateCheck.php", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    xmlhttp.onreadystatechange = function ()
    {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {

            if (xmlhttp.responseText == "Error")
                callback(false);
            else if (xmlhttp.responseText == "Yes")
                callback(a);
            else if (xmlhttp.responseText >= 1 && xmlhttp.responseText <= 5)
                callback(true);
            else
                callback(true);
        }
    };

    xmlhttp.send("uid=" + uvalue + "&pass=" + pvalue);
}

以这种方式调用你的函数

function validateForm(i){
   var uid = document.myform1.username;
   var pass = document.myform1.password;

    validateLogin(uid, pass, i, function (resp) {
        if (resp) {
            alert(resp);
        }
    });
}

使用 Jquery Deffered Object

function validateLogin(uid, pass, i) {
   var result = jQuery.Deferred();
   ...
    if (xmlhttp.responseText == "Error")
       result.value = false;
    else if (xmlhttp.responseText == "Yes")
       result.value = a;
   ...
   xmlhttp.send("uid=" + uvalue + "&pass=" + pvalue);
   return result.value;
}

答案 1 :(得分:0)

此功能不会提醒任何事情。当你的函数执行完成后,你的ajax进程仍然在后台工作,你的函数不返回任何东西,if条件将失败。

如果你想进行任何验证,那么你必须在ajax共振中进行验证。

答案 2 :(得分:0)

  1. 如果您需要下一步操作的结果,可以同步调用它:
  2. xmlhttp.open(&#34; POST&#34;&#34; validateCheck.php&#34;,FALSE);

    1. 给异步函数回调以使用结果

    2. 查看jQuery Deferred Object

    3. 将全局var或html元素设置为返回值

    4. ...