Jquery Ajax发布成功/错误function

我有一个没有被错误捕获的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,但错误函数不会触发,只有成功函数。 它将发布“No group selected success”。

谢谢你的帮助!

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; }); 

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: 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 } 

只有在请求的页面返回错误状态代码时,才会调用jQuery的ajax函数的error方法。 您的示例可能会返回HTTP 200,这就是调用success原因; jQuery不会询问响应的内容以确定它是否成功。

您应该在$group_id为0时设置4xx状态代码 , $group_id是将echo调用替换为header 。