繁体   English   中英

为什么不应该进行这个ajax调用

[英]Why is this ajax call being made even though it shouldn't be

我有这个验证脚本即时通讯正在工作,但看不到为什么即时通讯有问题。

您可以看到我有一个check = false / true,请在运行ajax调用之前进行检查。

但是,即使一个字段为空并且check设置为false,它仍在运行该调用。

所以:

// JavaScript - Update Password AJAX

$(document).ready(function () {

    // When the form is submitted
    $('.updatepasswordform').submit(function () {

        var check = true;

        // Get the values
        var password1 = $("input[name=password1]").val();
        var password2 = $("input[name=password2]").val();
        var newpassword = $("input[name=newpassword]").val();

        /* Password Validation */

        // If fields are empty
        if (password1 === '') {
            check = false;
            $("input[name=password1]").css('border', 'solid 2px red');
        }

        // If fields are empty
        if (password2 === '') {
            check = false;
            $("input[name=password2]").css('border', 'solid 2px red');
        }

        // If fields are empty
        if (newpassword === '') {
            check = false;
            $("input[name=newpassword]").css('border', 'solid 2px red');
        }

        if (check = true) {
            $.ajax({
                type: "POST",
                url: "process/updatepassword.php",
                data: $(".updatepasswordform").serialize(),
                dataType: "json",
                success: function (response) {

                    /* Checks for database validation, removed for space saving */

                }

            });
        }
        return false;
    });
});

if (check = true)是分配。 您需要检查。

if (check == true) {

或者就像JasonP提到的那样

if (check) {

您在if语句中仅使用一个等于。 改成这个

if (check == true) {

甚至更好

if (check) {

您使用赋值=而不是比较==来测试check 代替这个...

if (check = true) {

你的意思是这样写:

if (check == true) {

这是一个常见的陷阱。 true赋值以check if语句的条件是完全有效的,尽管在这种情况下,这不是您的本意。 check = true的结果也为 true (允许并行分配, a = b = c = true可以工作),因此从本质上讲,您在执行if (true) 这是可取的,尽管经常不小心使用会引起麻烦。 一般用途是将表达式的结果分配给范围为if语句的临时变量。

基本上,代替这个...

var result = expensiveCalculation()
if (result) {
  // do something with result
}

...它可以让你这样写:

if (result = expensiveCalculation()) {
  // do something with result
}

注意:

在这种特殊情况下,当您针对布尔值true / false进行测试时,始终最好只编写if (check)if (!check)而不是使用==进行显式比较。

笔记2:

“ check”是一个特别糟糕的变量名。 您的变量应富有表现力; 我应该知道它的作用,无需评论。 在这种情况下,我会至少称它为valid ,或者可能是formIsValid ,或者将检查结果反转并使用var errors = falseif (!errors)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM