【问题标题】:Returning AJAX Success and Error返回 AJAX 成功和错误
【发布时间】:2023-03-24 12:33:02
【问题描述】:

我已经构建了一个使用 AJAX 提交表单数据的登录脚本。

PHP 部分在没有 AJAX 的情况下也能正常工作。但是系统不支持 AJAX 实现。

即使 PHP 文件返回 true[正确的用户名和密码],它总是显示以下消息 ... 似乎 Jquery 中的 if 条件不起作用。

用户名/密码不正确

HTML 结果分区

<div id="user-result" align="center"></div>

jquery

<script type="text/javascript">
    $(document).ready(function () {
        var form = $('#loginform');
        form.submit(function (ev) {
            ev.preventDefault();
            $.ajax({
                type: form.attr('method'),
                url: form.attr('action'),
                cache: false,
                data: form.serialize(),
                success: function (data) {
                    if (data == "true") {
                        $("#user-result").html("<font color ='#006600'> Logged in | Redirecting..</font>").show("fast");
                        setTimeout(
                            function () {
                                window.location.replace("index.php");
                            }, 1500);
                    } else {
                        $("#user-result").html("<font color ='red'> Incorrect Username/Password</font>").show("fast");
                    }

                }

            });
        });
    }); 
</script>

fn_login.php

<?php
{
    session_start();
    include_once 'db_connect.php';

    if (isset($_POST))
     {
        $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING);
        $logpwd = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);

        $stmt = $conn->prepare("SELECT password FROM manager WHERE email = ? LIMIT 1");
        $stmt->bind_param("s", $email);


        $stmt->execute();
        $stmt->store_result();

        // get variables from result.
        $stmt->bind_result($password);
        $stmt->fetch();


        // Check if a user has provided the correct password by comparing what they typed with our hash
        if (password_verify($logpwd, $password))
        {
            $sql = "SELECT * from manager WHERE email LIKE '{$email}' LIMIT 1";
            $result = $conn->query($sql);
            $row=mysqli_fetch_array($result);
            $id = $row['id'];
            $conn->query("UPDATE manager SET lastlogin = NOW() WHERE id = $id");

            $_SESSION['manager_check'] = 1;
            $_SESSION['email'] = $row['email'];
            $_SESSION['fullname'] = $row['fullname'];
            $_SESSION['designation'] = $row['designation'];
            $_SESSION['id'] = $row['id'];
            echo "true";
        }
         else {
            die();
        }
     }
}

?>      

谁能指出代码/实践中的错误。

EDIT

刚刚尝试禁用 AJAX,当用户名/密码正确时,PHP 文件可以正常回显true

【问题讨论】:

  • 试试if( $.trim(data) == "true") insted of if(data == "true")

标签: php jquery ajax


【解决方案1】:

?&gt; 后面有空格

所以,AJAX 响应在 true 之后有空格。

解决方案:

从 PHP 文件末尾删除 ?&gt;

它不会影响任何 PHP 功能。

你的 AJAX 响应将没有空格。

从 PHP 文件末尾排除结束标记 ?&gt; 是现代 PHP 框架和 CMS 的标准做法。

调试 AJAX 的技巧:

1) 始终在或 Chrome 上使用 Firefox(带有 Firebug Add)。

2) 使用 Firebug 的Console 选项卡,检查哪些 AJAX 请求正在进行。

3) 在这里,您可以看到输入参数、标头和最重要的响应。

4) 所以,简而言之,你可以调试整个 AJAX 请求生命周期。

【讨论】:

  • 在成功函数中加入这一行:console.log(data);并在此处发布输出。
  • 添加并执行。我在哪里可以找到输出?
  • 如果是firefox,打开Firebug。在这里,您将获得“控制台”选项卡。在这里检查。
  • Chrome 也有控制台。右键单击任何元素并选择检查选项。
  • 是的,有一个 php 包含在真实之前回显评论...已解决...非常感谢
【解决方案2】:

您可以从 php 代码中回显 json_encode(array('success'=&gt;true)) 并在 jquery 中使用 if(data.success){} 修改您的 if 条件,您修改后的代码变为

<?php
{
    session_start();
    include_once 'db_connect.php';

    if (isset($_POST))
     {
        $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING);
        $logpwd = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);

        $stmt = $conn->prepare("SELECT password FROM manager WHERE email = ? LIMIT 1");
        $stmt->bind_param("s", $email);


        $stmt->execute();
        $stmt->store_result();

        // get variables from result.
        $stmt->bind_result($password);
        $stmt->fetch();


        // Check if a user has provided the correct password by comparing what they typed with our hash
        if (password_verify($logpwd, $password))
        {
            $sql = "SELECT * from manager WHERE email LIKE '{$email}' LIMIT 1";
            $result = $conn->query($sql);
            $row=mysqli_fetch_array($result);
            $id = $row['id'];
            $conn->query("UPDATE manager SET lastlogin = NOW() WHERE id = $id");

            $_SESSION['manager_check'] = 1;
            $_SESSION['email'] = $row['email'];
            $_SESSION['fullname'] = $row['fullname'];
            $_SESSION['designation'] = $row['designation'];
            $_SESSION['id'] = $row['id'];
            echo json_encode(array('success'=>true));
        }
         else {
            die();
        }
     }
}

AND JQuery 变成

<script type="text/javascript">
    $(document).ready(function () {
        var form = $('#loginform');
        form.submit(function (ev) {
            ev.preventDefault();
            $.ajax({
                type: form.attr('method'),
                url: form.attr('action'),
                cache: false,
                data: form.serialize(),
                success: function (data) {
                    if (data.success) {
                        $("#user-result").html("<font color ='#006600'> Logged in | Redirecting..</font>").show("fast");
                        setTimeout(
                            function () {
                                window.location.replace("index.php");
                            }, 1500);
                    } else {
                        $("#user-result").html("<font color ='red'> Incorrect Username/Password</font>").show("fast");
                    }

                }

            });
        });
    }); 
</script>

【讨论】:

  • 试过了.. 结果一样... 还用 if(data.success){} 替换了当前条件
  • 这是来自另一个 php 包含的评论,它与返回值混淆.. 问题已解决..
猜你喜欢
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 2021-01-12
  • 1970-01-01
  • 2016-03-25
相关资源
最近更新 更多