1

我在为变量设置值时遇到问题。我的代码如下。

function fpform(){
var response_new = '';
var password_reset = "";
var fpemail = $('#frgtpwd').val();
//var fpemail = document.getElementById('frgtpwd').value;

if (fpemail == ""){
    $('span#fperror').text("insert your emal address");
    //document.getElementById('fperror').innerHTML = "Insert your email address";
    password_reset = 'no';
} else { 
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (filter.test(fpemail)==false) { 
        $('span#fperror').text("Email address is not in valid format");
        //document.getElementById('fperror').innerHTML = "Email address is not in valid format";
         password_reset = 'no';
    } else {
        $("#loader").html('<img src="images/ajax-loader.gif" />');
        $.post("forgot_password_process.php", {
            email:fpemail
        }, function(response){
            response_new = response.trim();
        }).success(function () {
            if (response_new == 'yes'){ 
                $("#fperror").html('<font color="green"><b>Your password has been reset now and emailed to you </b></font>');
                $("#loader").empty();
                password_reset = 'yes';
            } else {
                $("#loader").empty();
                $("#fperror").html('<font color="black"><b> Email address was not found in database!</b></font>');
                password_reset = 'no'; 
            } 
        }); 
    }
}

if (password_reset == "yes"){
    alert(password_reset);
    return true;
} else {
    alert(password_reset);
    return true;
}
}

最后一个 if 条件是检查 password_reset 变量是否设置为 yes 并根据它返回 true 或 false。但是警报显示 password_reset 变量的空白值。我似乎找不到这背后的问题,因为 password_reset 变量应该在到达最后一个 if 之前被分配。任何人都可以请提出一个解决方案。

亲切的问候

4

2 回答 2

4

$.post()是异步的,因此当您提醒数据时请求尚未完成。为此,您还需要在成功回调中调用警报,以确保在尝试警报之前您拥有数据。另一种选择是使用同步 AJAX 调用(虽然这很少是一个好的选择)。

更新

不知道为什么你的函数返回真/假,但要让它工作,你必须进行同步 AJAX 调用,否则外部函数将在 AJAX 调用完成之前返回很久,那时你不知道反应是什么。

您可能应该尝试重构您的代码,以使依赖于您的外部函数响应的代码可由成功回调调用。

于 2012-09-02T20:39:30.627 回答
-1

我要发布和克里斯托弗一样的东西。这是一个固定的代码示例。只需删除最后一个代码块。

.success(function () {
        if (response_new == 'yes'){ 
            $("#fperror").html('<font color="green"><b>Your password has been reset now and emailed to you </b></font>');
            $("#loader").empty();
            password_reset = 'yes';
            alert 'yes';
            return true;
        } else {
            $("#loader").empty();
            $("#fperror").html('<font color="black"><b> Email address was not found in database!</b></font>');
            password_reset = 'no';
            alert 'no';
            return false;
        }
于 2012-09-02T20:44:22.997 回答