我使用 jquery validate 创建了一个表单。表单会正确验证,一旦每个字段都被验证为正确,它就应该通过 ajax 提交。这就是问题出现的地方。我故意为数据库设置了不正确的登录详细信息,因此我希望 ajax 提交返回错误,但它总是以成功返回(debug() 确认连接到数据库时出现问题)。我也使用了正确的凭据,它会提交到数据库,并使用相同的"成功"警报消息进行回复。
下面是相关代码:
$("#form1").validate({
ignore: "hidden:not(select)",
rules: {
//custom rules
},
messages:{
//custom messages
},
errorPlacement: function(error, element) {
//custom error placement
},
submitHandler: function(form){
$.ajax({
url: "submitForm.php",
type: "post",
data: $(form).serialize(),
success: function(){
alert("successful");
},
error: function(jq,status,message){
alert("failed");
}
});
return false;
}
});
您仍然得到"成功"的原因是 PHP 发送200
响应,以便浏览器显示 PHP 错误,success:
处理程序检查200
响应。
如果 PHP 没有发送200
响应,那么您将永远不会看到 PHP 错误。
理想的解决方案是执行服务器端验证查询是否成功,然后将自定义成功和错误响应发送回 AJAX 的成功处理程序。
下面是一个快速的肮脏演示
阿贾克斯
$.ajax({
url: "submitForm.php",
type: "post",
data: $(form).serialize(),
dataType: 'json'
success: function(data){
alert(data['success']+' : '+data['message']);
if(data['success']){
// do successful things
}
else{
// do failure things
}
},
error: function(jq,status,message){
alert("failed");
}
});
提交表单.php
<?php
if($query == 'successful'){
$return['success'] = true;
$return['message'] = 'Success!';
}
else{
$return['success'] = false;
$return['message'] = 'Failed!';
}
echo json_encode($return);
?>
还有另一种方法可以做到这一点。
if($("#form1").validate())
{
$.ajax({
url: "submitForm.php",
type: "post",
data: $(form).serialize(),
success: function(){
alert("successful");
},
error: function(jq,status,message){
alert("failed");
}
});
return false;
}
此代码:
success: function(){
alert("successful");
},
在 AJAX 调用成功时执行,而不是在登录成功时执行。您需要将登录结果响应传递给您的 JavaScript,例如:
success: function(response){
if ( response === 'successful' )
{
alert('success');
}
else
{
alert('failed to login');
}
},
还要小心给出适当的回应。例如,响应将是一个完整的HTML页面(我们真的不想传递),所以在你的PHP中你可以做这样的事情:
if ( login_checking_function() )
{
if ( empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest')
)
{
echo 'successful';
}
else
{
// do something for non AJAX call, but successful login
}
}
您检查$_SERVER['HTTP_X_REQUESTED_WITH']
因为 jQuery 将此标头添加到 AJAX 调用中,这样您就知道该页面是通过 AJAX 请求的。