所以我有一个使用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对象的方式是不正确的。任何帮助将非常感激。
你不应该
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);
}
希望它能清除你的困惑。
当echo "Registered \n";
将Ajax请求返回给浏览器时,请从代码中删除echo "Register";
行,并且您的实际数据echo json_encode($data);
永远不会返回到浏览器。