如何防止Javascript函数返回值,直到ajax方法返回值

时间:2015-07-27 16:02:18

标签: javascript jquery ajax

我正在尝试验证输入的电子邮件是否存在于数据库中,并根据此结果执行代码。为此,我调用一个Javascript函数,它调用ajax jquery方法到一个php页面,它检查输入的电子邮件的id是否存在于数据库中。 使用的代码是:

function validateEmail()
 { var username= document.getElementByName("email").value;
 alert("Username is"+ username);
 $.ajax({
            type: "POST",
            url: "emailCheck1.php",
            data: "username="+username,
            success: function(result){
                            if(result=="checked"){
                              return true;
                              }
                             else  
                             {
                              document.getElementById("errorEmail").style.display="inline";
                               return false;
                              } } 
          error: function(xhr){
                    alert("An error occured: " + xhr.status + " " + xhr.statusText);
                }
       });

但问题是函数在ajax方法完成之前返回值。所以返回值不正确。 如何在ajax方法完成之前使函数不返回任何值,并基于ajax方法的返回值返回所需的值... 任何帮助将受到高度赞赏......

1 个答案:

答案 0 :(得分:0)

一旦ajax完成,你需要使用回调来处理值,或者使查询同步(这可能是错误的。)

如果要在方法上设置参数,可以查看函数currying以指定回调。

See here

function partial(fn) {
        // A reference to the Array#slice method.
        var slice = Array.prototype.slice;

        // Convert arguments object to an array, removing the first argument.
        var args = slice.call(arguments, 1);

        return function() {
                // Invoke the originally-specified function, passing in all originally-
                // specified arguments, followed by any just-specified arguments.
                return fn.apply(this, args.concat(slice.call(arguments, 0)));
        }

function doRequest()
{
  callback = partial(doSomething, "Test Value");
  $.post('action', {json_arg: "Test Arg"}, callback);
}