Ajax帖子的重新回应



我正在尝试检查数据库中是否存在电子邮件,但该函数不返回值。

这是代码:

function checkemail(email)
{
    var returnVal = "";
    if (email.indexOf("@") != -1 && email.indexOf(".") != -1)
    {
        $.post( "registreren.php?email=" + email, function( response ) {
            if(response == 1) { returnVal = 1; }
            if(response == 2) { returnVal = 2; }
        });
    }
    else
    {
        returnVal = 3;
    }//email
    return returnVal;
}

编辑:电子邮件作为字符串发送

我简短地说,您不能从ajax调用中返回值,因为它本质上是异步的,语句return value之前执行

要解决此类情况,请使用 callback ,一个接受为参数的函数,在收到response时(异步操作完成时(执行。

试试这个:

function checkemail(email, callback) {
  var returnVal = "";
  if (email.indexOf("@") != -1 && email.indexOf(".") != -1) {
    $.post("registreren.php?email=" + email, function(response) {
      callback(response);
    });
  } else {
    callback(3);
  }
}
checkemail('abc@xyz.com', function(val) {
  alert(val);
});
checkemail('INVALID_EMAIL', function(val) {
  alert(val);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

你能用下面这样简单的东西吗

$.ajax({
        url: 'registreren.php',
        type: 'post',
        dataType: "json",
        data: {'email': email},
        success: function (response) {
            if (response == 1)
            {
               returnVal = 1; 
            }
            else
            {
               returnVal = 3; 
            }
        }
    });

而不是

$.post( "registreren.php?email=" + email, function( response ) {
            if(response == 1) { returnVal = 1; }
            if(response == 2) { returnVal = 2; }
    });

最新更新