我有一个post函数,它不会在错误时被捕获。
这是从postride.php返回的值。
if ($group_id==0) {
echo 'No group selected';
return false;
exit;
}
下面是jquery代码:
$(document).ready(function(){
$('#postride').submit(function(event) {
event.preventDefault();
dataString = $("#postride").serialize();
$.ajax({
type: "post",
url: "postride.php",
data:dataString,
error: function(returnval) {
$(".message").text(returnval + " failure");
$(".message").fadeIn("slow");
$(".message").delay(2000).fadeOut(1000);
},
success: function (returnval) {
$(".message").text(returnval + " success");
$(".message").fadeIn("slow");
$(".message").delay(2000).fadeOut(1000);
//setTimeout( function() { top.location.href="view.php" }, 3000 );
}
})
return false;
});
});
post函数返回false,但error函数不触发,只触发success函数。它将显示"No group selected success“。
谢谢你的帮助!
发布于 2011-09-16 10:58:03
jQuery ajax方法中的错误选项是针对错误连接、超时、无效url等性质的错误。这不是你所想的那种错误。
大多数人都是这样做的……
php
if ($group_id == 0) {
echo json_encode(array(
'status' => 'error',
'message'=> 'error message'
));
}
else
{
echo json_encode(array(
'status' => 'success',
'message'=> 'success message'
));
}
javascript
$(document).ready(function(){
$('#postride').submit(function(event) {
event.preventDefault();
dataString = $("#postride").serialize();
$.ajax({
type: "post",
url: "postride.php",
dataType:"json",
data: dataString,
success: function (response) {
if(response.status === "success") {
// do something with response.message or whatever other data on success
} else if(response.status === "error") {
// do something with response.message or whatever other data on error
}
}
})
return false;
});
发布于 2011-09-16 11:00:54
wsanville是正确的:“成功”或“失败”是指ajax请求的成功/失败。
不过,我发现在json响应中返回信息更有用,而不是更改HTTP标头。例如,我会让postride.php像这样响应:
$error = false;
if ($group_id==0) {
$error = 'No group selected';
}
$response = array('error'=>$error);
echo json_encode($response);
然后在JS的"success“回调中,我会这样做:
success: function (returnval) {
if (returnval.error) {
$(".message").text(returnval + " failure")
.fadeIn("slow",function(){
$(this).delay(2000).fadeOut(1000);
});
} else {
//do whatever user should see for succcess
}
发布于 2011-09-16 10:49:08
只有当请求的页面返回错误状态码时,才会调用jQuery的ajax
函数的error
方法。您的示例可能会返回HTTP200,这就是调用success
的原因;jQuery不会询问响应的内容来确定它是否成功。
您应该在$group_id
为0时设置4xx status code,方法是将echo
调用替换为对header的调用。
https://stackoverflow.com/questions/7439606
复制相似问题