如何将错误消息从一个php文件检索到另一个php文件?

如何将错误消息从一个php文件检索到另一个php文件?,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,我是ajax新手,这是我第一次尝试使用它 我正在尝试做的是创建一个小系统,在不更新页面的情况下向数据库注册电子邮件和密码,它工作得很好 但是,正如您在我的“register.php”文件中所注意到的,有一个条件是不允许重复的电子邮件,还有一个条件是防止出现错误……那么,如果发生任何错误,我如何向我的索引页发送消息(警报或其他信息) 这是我的.js文件: $(document).ready(function(){ $("#btnRegister").click(function(){

我是ajax新手,这是我第一次尝试使用它

我正在尝试做的是创建一个小系统,在不更新页面的情况下向数据库注册电子邮件和密码,它工作得很好

但是,正如您在我的“register.php”文件中所注意到的,有一个条件是不允许重复的电子邮件,还有一个条件是防止出现错误……那么,如果发生任何错误,我如何向我的索引页发送消息(警报或其他信息)

这是我的.js文件:

$(document).ready(function(){

    $("#btnRegister").click(function(){

        $.ajax({
            type: 'post',
            url: 'register.php',
            data: { txtEmail: $("#frmEmail").val(), txtPassword: $("#frmPassword").val() }
        }).done(function(){
            $("#frmEmail").val('');
            $("#frmPassword").val('');
            $("#frmEmail").focus();
        });
    });
});
我的“register.php”文件:

<?php

    try
    {
        $handler = new PDO('mysql:host=127.0.0.1;dbname=register', 'root', '');
        $handler -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $email = $_POST['txtEmail'];
        $password = $_POST['txtPassword'];

        $sql = "SELECT email FROM users WHERE email = ?";
        $query = $handler -> prepare($sql);
        $query -> bindValue(1, $email);
        $query -> execute();

        if(($query -> rowCount()) != 0)
            die("Error: the inserted email already exists.");
        else
        {
            $sql = "INSERT INTO users (email, pass) VALUES (?, ?)";
            $query = $handler -> prepare($sql);
            $query -> bindValue(1, $email);
            $query -> bindValue(2, $password);
            $query -> execute();
        }
    }
    catch(PDOException $ex)
    {
        die("Error: " . $ex -> getMessage());
    }

?>

您只需更改所有
模具()
echo”“因此,它不会终止PHP部分,而是返回指向索引文件的消息。接下来,只需将jQuery脚本更改为:

$(document).ready(function(){

    $("#btnRegister").click(function(){

        $.ajax({
            type: 'post',
            url: 'register.php',
            data: { txtEmail: $("#frmEmail").val(), txtPassword: $("#frmPassword").val() }
        }).done(function(msg){
            if(msg != ''){
                alert(msg);
            }
            $("#frmEmail").val('');
            $("#frmPassword").val('');
            $("#frmEmail").focus();
        });
    });
});

您所需要做的就是更改所有的
die()
echo”“因此,它不会终止PHP部分,而是返回指向索引文件的消息。接下来,只需将jQuery脚本更改为:

$(document).ready(function(){

    $("#btnRegister").click(function(){

        $.ajax({
            type: 'post',
            url: 'register.php',
            data: { txtEmail: $("#frmEmail").val(), txtPassword: $("#frmPassword").val() }
        }).done(function(msg){
            if(msg != ''){
                alert(msg);
            }
            $("#frmEmail").val('');
            $("#frmPassword").val('');
            $("#frmEmail").focus();
        });
    });
});

通常,PHP文件会返回一个响应,指示注册的成功或失败

在PHP文件中,当出现错误时,您应该返回包含错误消息的json编码数组,而不是
die
ing,例如:

if(($query -> rowCount()) != 0)
    echo json_encode(array('error' => "Error: the inserted email already exists."));
    exit;
else
然后在javascript的
done
函数中,您可以检查以下消息:

}).done(function(data){
    if (data.error) {
        alert(data.error); // or do something else
    } else {
        // every thing looks ok, do your thing
    }
});
我建议总是从php返回一些东西,不管是上面提到的错误消息,还是简单地
json_encode(array('success'=>true))。这样,您就可以确保请求实际完成了预期的操作,并且不会因为其他(不好的)原因返回空白页


注意:如果您在实现此功能时遇到问题,可能需要将
数据类型:“json”
添加到ajax选项中(在
类型:“post”
下)

通常,PHP文件会返回一个指示注册成功或失败的响应

在PHP文件中,当出现错误时,您应该返回包含错误消息的json编码数组,而不是
die
ing,例如:

if(($query -> rowCount()) != 0)
    echo json_encode(array('error' => "Error: the inserted email already exists."));
    exit;
else
然后在javascript的
done
函数中,您可以检查以下消息:

}).done(function(data){
    if (data.error) {
        alert(data.error); // or do something else
    } else {
        // every thing looks ok, do your thing
    }
});
我建议总是从php返回一些东西,不管是上面提到的错误消息,还是简单地
json_encode(array('success'=>true))。这样,您就可以确保请求实际完成了预期的操作,并且不会因为其他(不好的)原因返回空白页


注意:如果您在实现此功能时遇到问题,可能需要将
数据类型:“json”
添加到ajax选项中(在
类型:“post”
下)

哈哈!比我想象的容易多了!谢谢,icecub的回答也很有帮助!它现在可以工作了,我之所以使用“die”函数是因为我将用户发送到另一个页面,所以我想“这可能是学习ajax的好机会”,我看到我也将学习一些JSON…哈哈!比我想象的容易多了!谢谢,icecub的回答也很有帮助!它现在可以工作了,我之所以使用“die”函数是因为我将用户发送到另一个页面,所以我想“这可能是学习ajax的好机会”,我知道我也将学习一些JSON。。。