无法使用ajax解析响应

问题描述 投票:0回答:2

所以我有一个使用JSON发布$.ajax对象的js文件,然后我的php脚本接受了JSON对象并对其做了一些事情,但是,我无法从php脚本中获取json响应(成功回调函数从不运行)。

register_script.js:

$.ajax({
    method: "post",
    dataType: "json",
    url: "http://localhost/login/webservices/register2.php",
    data: {
        reg_username: username,
        email: email,
        reg_password: password,
        confirm_password: confirm_pass
    },
    success: function (data) {
        alert("hello?");
        //alert(data.status);           

    }
}).fail(function (jqXHR, textStatus, errorThrown) {
    console.log("Post error: " + errorThrown);
});

register2.php:

if (isset($_POST['reg_username'], $_POST['email'], $_POST['reg_password'], $_POST['confirm_password'])) {
    $username = $_POST['reg_username']; //$_POST['from html']
    $email = $_POST['email'];
    $password = hash('md5', ($_POST['reg_password']));
    $confirm_password2 = hash('md5', ($_POST['confirm_password']));

    $sql = "INSERT INTO users (username, email, password) VALUES ('$username','$email','$password')";

    if ($password == $confirm_password2) {
        $response = sqlsrv_query($conn, $sql);
        if ($response) {
            $data = array(
                "username" => $username,
                "email" => $email,
                "password" => $password,
                "confirmPass" => $confirm_password2,
                "status" => "Registered",
            );
            echo "Registered \n";

        }
    }
}
//...
//some other validations
//...

echo json_encode($data);

我有一种感觉,我处理json对象的方式是不正确的。任何帮助将非常感激。

javascript php jquery json ajax
2个回答
0
投票

你不应该

echo

当你使用ajax json_encode时,除了dataType : json以外的任何东西

echo "Registered \n";

之前

echo json_encode

删除它,它应该工作

编辑:

当你在dataType : "json"调用中设置ajax时,当调用结束时,响应应该在json中,并且响应中除json编码的字符串之外的任何文本都将导致错误。如果你仍然需要调试并查看脚本采用的路径,你可以在$data中添加另一个索引(我假设$ data是一个数组),所以它就像

if($registered){
   $data['debug_logs'] .='Registration successfull----';
}

if($emailSent){
    $data['debug_logs'].='Email sent for registration-----';
}

echo json_encode($data);

然后在你的ajax成功函数中你就可以使用它了

success:function(data){
console.log(data.debug_logs);
}

希望它能清除你的困惑。


0
投票

echo "Registered \n";将Ajax请求返回给浏览器时,请从代码中删除echo "Register";行,并且您的实际数据echo json_encode($data);永远不会返回到浏览器。

© www.soinside.com 2019 - 2024. All rights reserved.