0

我在 jQuery 方面的经验有限,我四处寻找答案,但似乎找不到。

此函数根据获取返回 false 或 true。现在我的问题是,如果我得到我的数据,函数“可用性”不会返回 false 或 true。

这是代码。

function Availability(){
    var email = jQuery('#emailRegister').val();
      jQuery.get("test.php", {email: email})
        .done(function(data) {
          if(data == 'true'){
            jQuery(".warningEmailDuplicate").hide();
            return true;
          }else if(data == 'false'){
            jQuery(".warningEmailDuplicate").show();
            return false;
        }
    });
}
4

2 回答 2

1

jQuery.get创建一个 AJAX 请求。这些是异步的。您不能return将 AJAX 回调中的值传递给调用函数。在 HTTP 请求完成之前,该函数将退出,不返回任何内容。

您需要重写代码以使用回调:

function Availability(){
    var email = jQuery('#emailRegister').val();
      jQuery.get("test.php", {email: email})
        .done(function(data) {
          if(data == 'true'){
            jQuery(".warningEmailDuplicate").hide();
            AvailabilityResult(true);
          }else if(data == 'false'){
            jQuery(".warningEmailDuplicate").show();
            AvailabilityResult(false);
        }
    });
}

function AvailabilityResult(available) {
    // *available* will be true or false
    // do with this value what you wanted to do with the return value from Availability
}
于 2013-07-16T11:58:02.440 回答
0

JQuery 是 Async 脚本语言,因此当您调用此方法时,编译器不会等待获取返回值。

当你调用 Availablity(); 然后将 Ajax 获取请求发送到 test.php,同时编译器不会从您的方法中返回任何内容,并且分配变量似乎未定义。

为了防止这个问题,你需要创建一个回调函数而不是简单的返回值。参见没有回调例子和有回调的例子

试试这个代码:

function Availability(callback){
    var email = jQuery('#emailRegister').val();
      jQuery.get("test.php", {email: email})
        .done(function(data) {
          if(data == 'true'){
            jQuery(".warningEmailDuplicate").hide();
            callback(true);
          }else if(data == 'false'){
            jQuery(".warningEmailDuplicate").show();
            callback(false);
        }
    });
}
//calling function
Availablity(function(status){
var available = status;
    alert(available);
});
于 2013-07-16T12:07:02.557 回答