我是ajax的新手,这是我第一次尝试使用它。
我要做的是创建一个小型系统,在不更新页面的情况下向数据库注册电子邮件和密码,它工作得很好!
但是,正如您将注意到我的'register.php'文件,有条件不允许重复的电子邮件,以及PDOException以防止错误......所以,我该如何发送消息(警报或什么)到我的索引页面,以防它们发生?
这是我的.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());
}
?>
答案 0 :(得分:0)
您需要做的就是将所有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();
});
});
});
答案 1 :(得分:0)
通常,您的PHP文件会返回一个响应,指示注册成功或失败。
在PHP文件中,当出现错误时,应该返回包含错误消息的json编码数组,而不是die
,例如:
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));
。这样,您可以确定请求实际上已经完成了预期的操作,并且没有为另一个(坏)原因返回空白页。
注意:如果您在解决此问题时遇到问题,可能需要将dataType: 'json'
添加到您的ajax选项(type: 'post'
下)