如果语句不起作用 - JavaScript

if statement not working - javascript

本文关键字:JavaScript 不起作用 语句 如果      更新时间:2023-09-26

我无法识别此JavaScript代码中的问题。我在某些逻辑上从服务器返回代码 154、155 和 1。这些数字是返回的,但如果语句返回的值在 if 语句中为 true,则它无法正常工作,它仍然运行else(默认值)。不知道为什么它无法检查值是否相同。

`$("#btnlogin").click(function (){
   // Create our XMLHttpRequest object
    var hr = new XMLHttpRequest();
    // Create some variables we need to send to our PHP file
    var url = "phpfiles/login.php";
    var username = document.getElementById("username").value;
    var password = document.getElementById("password").value;    
    var vars = "username="+username+"&password="+password;
    hr.open("POST", url, true);
    // Set content type header information for sending url encoded variables in the request
    hr.setRequestHeader("Content-type", "plain/text");
    // Access the onreadystatechange event for the XMLHttpRequest object
    hr.onreadystatechange = function() {
        if(hr.readyState == 4 && hr.status == 200) {
            var return_data = hr.responseText;

            if (return_data == "154"){
                $.Notification.notify('error','top left', 'Wrong Information', 'Username/Password is incorrect');
            }else if (return_data=== "155")
            {
                $.Notification.notify('error','top left', 'User Does not exist', 'This user Does not exist. Please Check and try again.');
            }
            else if (return_data == "1")
            {
                $.Notification.notify('success','top left', 'Success', '');
                GenToken();
            }else{
                alert();
            }
        };
    };
    // Send the data to PHP now... and wait for response to update the status div
    hr.send(vars); // Actually execute the request


});`

无论条件是真是还是假,它总是归结为别的。它指向此代码

`<?php
if(isset($_POST['username']))
{
    $username = FILTER_INPUT(INPUT_POST, "username", FILTER_SANITIZE_STRING);
    $password = FILTER_INPUT(INPUT_POST, "password", FILTER_SANITIZE_STRING);
    require_once("../class/class.login.php");
    $lh = new LoginHander;
    $lh->LogUserIn($username, $password, 'admin');
}
?>`

这是调用这个函数

`    public function LogUserIn($username, $password)
    {
        $username = $this->es($username);
        $password = $this->es($password);
        $ip = $this->getClientIP();
        $sql = "SELECT username, password FROM admin WHERE username = ?";
        try{
            $query = $this->con->prepare($sql);
            $query->execute(array($username));
            $result = $query->fetchall(PDO::FETCH_ASSOC);
        } catch (Exception $e) {
            $this->error($e->getMessage());
        }
        $this->addlog($username, $ip);
        if(count($result) > 0)
        {
            header("Content-type: plain/text");
           $pass = $result[0]['password'];
           if(password_verify($password, $pass)){
               $this->SetVars($username);
               echo "1";
           }else{
                echo "154";
                exit();
           }
        }
        else
        {
           echo "155";
                exit();
        }
    }`

我不知道我尝试过的问题在哪里,===而不是==但它没有帮助。请告诉我我在哪里犯了错误。提前谢谢你

Javascript 可以在浏览器中调试。每当观察到条件未正确计算时,最好使用调试器进行检查。

return_data == "154"

是一项非严格检查,即使它们的类型不同,也会进行评估以true154 == "154" true.另一方面

return_data=== "155"

是一个严格的比较。 155 === "155"false.

return_data == "1"

是另一个非严格比较。

通常,这些错误发生在对相似但不相同的值进行严格比较的情况,或者可以在值的开头或结尾找到白色字符的情况。原来是这样的。