Jquery Ajax发布成功/错误功能

时间:2011-09-16 02:43:46

标签: jquery

我有一个没有发现错误的帖子功能。

这是从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”。

感谢您的帮助!

3 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:2)

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
    }

答案 2 :(得分:0)

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

您应该在$group_id为0时设置4xx status code,通过拨打header替换echo来电。