关于php:在javascript函数中设置变量

Setting the variable in javascript function

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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">Your password has been reset now and emailed to you </font>');
                $("#loader").empty();
                password_reset = 'yes';
            } else {
                $("#loader").empty();
                $("#fperror").html('<font color="black"> Email address was not found in database!</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变量的空白值。 我似乎无法找到这背后的问题,因为在到达最后一个if之前应该分配password_reset变量。 任何人都可以建议解决方案。

亲切的问候


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

更新

不确定为什么你的函数返回true / false,但为了工作,你必须进行同步AJAX调用,否则外部函数将在AJAX调用完成之前很久就返回,此时你不知道 回应是什么。

您可能应该尝试重构代码,以使代码依赖于外部函数的响应,而不是由success-callback调用。


我会像Christofer一样发布同样的东西。 这是一个固定的代码示例。 只需删除最后一个代码块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.success(function () {
        if (response_new == 'yes'){
            $("#fperror").html('<font color="green">Your password has been reset now and emailed to you </font>');
            $("#loader").empty();
            password_reset = 'yes';
            alert 'yes';
            return true;
        } else {
            $("#loader").empty();
            $("#fperror").html('<font color="black"> Email address was not found in database!</font>');
            password_reset = 'no';
            alert 'no';
            return false;
        }