当前位置: 首页 > 知识库问答 >
问题:

返回AJAX成功和错误

邢心水
2023-03-14

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

PHP部分在没有AJAX的情况下运行良好。但是系统不能与AJAX实现一起工作。

它始终显示以下消息,即使 PHP 文件返回 true[正确的用户名

用户名/密码不正确

超文本标记语言Result Div

<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

共有2个答案

越朗
2023-03-14

您可以回显< code > JSON _ encode(array(' success ' =

<?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();
        }
     }
}

而杰奎里变成了

<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>
司马弘益
2023-03-14

后面有空格吗?

因此,AJAX响应在true之后有空格。

解决方案:

移除<代码>?

它不会影响任何PHP功能。

你的AJAX响应将没有空格。

不包括结束标记< code >?

调试 AJAX 的提示:

1)始终使用火狐(与火虫添加)在或铬。

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

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

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

 类似资料:
  • 问题内容: 我有以下JS 和以下控制器代码: addarticle()javascript ajax可以运行并将vars发送到服务器并进入db,但是,javascript然后将运行错误函数而不是成功函数。http响应代码是200,我以为它将运行Success函数。有什么建议? 问题答案: 您需要从控制器返回json,因为这是jQuery期望的。您可以返回即 或者,您可以将html设置为数据类型(也

  • 问题内容: function ChatServerQuery(data_json) { 我执行对服务器的请求的功能。问题是我无法返回从服务器收到的文本。我不知道如何从匿名函数(事件成功)转移到ChatServerQuery(可以在其中轻松将其取回)。 问题答案: 您最好更改您的方法以反映AJAX请求的异步性质。 使用回调函数 然后,您将使用它: 使用承诺对象 返回实现Promise iterfac

  • 基类控制器里有success方法,用于api的成功返回输出 /** * 操作成功跳转的快捷方法 * @access protected * @param mixed $msg 提示信息 * @param mixed $data 返回的数据 * @param array $header 发送的Header信息 * @return void */ protected f

  • 大家好, 这就是我的两难处境:在Chrome、Edge和Internet Explorer上,AJAX调用只返回成功,运行以下查询,一切都很好。但是,在Firefox中,AJAX调用返回时控制台日志中有一个错误,最终第二次被触发(不是有意的)以返回成功,从而开始查询等。。。警报发出“错误”信号。 我正试图从最终用户的角度解决这个问题。该函数正在运行,但如果警报返回时出错,用户将不知道他们是否正确完

  • 问题内容: 我正在使用AngularJS 1.1.3将新的$ resource与promises一起使用… 我如何从中获得回调?我尝试使用与$ http相同的方法: 但是没有“成功”也没有“错误”功能… 我也尝试过: 即使返回的是 404 ,也总是打印“成功,有数据” 。 任何想法? 谢谢 问题答案: 从角度 资源 和角度1.2 的 PR开始 ,角度将切换为执行成功/错误检查的更简单方法。无需附加

  • 问题内容: 我有以下 我有一个运行一些ajax的函数,然后根据ajax是否成功返回true或false。我从代码的多个位置调用了这个ajax函数。 因为该函数在ajax完成之前结束,所以它总是返回false。如何避免这种情况? 我读到一些建议我在函数中执行的操作,然后将和函数移至我的和函数。但是,在我的方法中,我进行了大量的计算。很多代码。因此,问题在于,如果我将功能移至其他功能,那么我将复制一堆