我使用jquery validate创建了一个表单。表单正确验证,一旦每个字段都被验证为正确,它就意味着通过ajax提交。这就是出现问题的地方。我故意为数据库设置了不正确的登录详细信息,所以我期望ajax提交返回错误,但它总是返回成功(debug()确认连接到DB时出现问题)。我也使用了正确的凭据,它提交给数据库并回复相同的“成功”警报消息。
以下是相关代码:
$("#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;
}
});
答案 0 :(得分:4)
您仍然获得“成功”的原因是因为PHP发送200
响应以便浏览器显示PHP错误并且success:
处理程序检查200
响应
如果PHP没有发送200
响应,那么您将永远不会看到PHP错误。
理想的解决方案是对服务器端进行验证,以确定查询是否成功,然后将自定义成功和错误响应发送回AJAX的成功处理程序。
下面是一个快速的脏演示
<强> 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");
}
});
<强> submitForm.php 强>
<?php
if($query == 'successful'){
$return['success'] = true;
$return['message'] = 'Success!';
}
else{
$return['success'] = false;
$return['message'] = 'Failed!';
}
echo json_encode($return);
?>
答案 1 :(得分:2)
还有另一种方法可以做到。
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;
}
答案 2 :(得分:2)
此代码:
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提供的。