jQuery $ .post在调用时没有完成

时间:2010-10-12 21:59:02

标签: jquery

我有以下功能用于检查电子邮件地址是否已经注册。

checkTaken() {
  var email_var = $('input#email').val();

  $.post("../includes/check_email.inc.php",{email:email_var} ,function(data) {
      var ret = data + "";
    if(ret=="true") {//if username not avaiable
      $('div#emailTaken').show();
      $('input#email').addClass('redBack');
      return false;
    } else {
      $('div#emailTaken').hide();
      $('input#email').removeClass('redBack');
      return true;
    }
  });
} 

当我使用以下内容调用它时,它可以正常工作:

email.blur(checkTaken);

但是当我做

之类的事情时
var test1 = checkTaken();

if(chekTaken) {
奇怪的事情发生了。它进入函数,执行$ .post行,但从不进入其余的例程。为什么是这样?我该如何解决?

作为一个注释,当我使用最后两个示例调用该函数时,我确实从服务器获取了seen through firebug的信息。如果我为test1添加一个监视,它仍未定义。

4 个答案:

答案 0 :(得分:1)

您正在使用同步函数调用混合异步后回调。从回调返回不会返回被叫方。

答案 1 :(得分:0)

这种情况正在发生,因为checkTaken()在返回之前不等待$.post完成,因为$.post将触发异步请求到服务器。你可以做的是改用$.ajax并将async选项设置为false(请记住,它会在等待请求完成时暂时阻止浏览器。)

答案 2 :(得分:0)

原因是AJAX中的第一个A意味着“异步”。这意味着您的代码在HTTP请求完成之前继续执行。当请求 完成时,运行处理程序函数。因此,您必须构建代码以考虑到这一点。这通常意味着将所有代码放在处理函数中依赖于AJAX请求,就像您已经在某种程度上所做的那样。

$.post("../includes/check_email.inc.php",{email:email_var} ,function(data) {
    var ret = data + "";
    if(ret=="true") {//if username not avaiable
        $('div#emailTaken').show(); // this works
        $('input#email').addClass('redBack'); // this works

        return false; // this does nothing
    } else {
        $('div#emailTaken').hide(); // this works
        $('input#email').removeClass('redBack'); // this works

        return true; // this does nothing
    }
});

答案 3 :(得分:0)

这是因为你的return语句在$ .post请求中,而不是在函数中。不是一回事。

您的功能不会返回任何值,这就是您不输入其他代码的原因。