首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jquery Ajax post成功/错误函数

Jquery Ajax post成功/错误函数
EN

Stack Overflow用户
提问于 2011-09-16 10:43:46
回答 4查看 73.5K关注 0票数 10

我有一个post函数,它不会在错误时被捕获。

这是从postride.php返回的值。

代码语言:javascript
运行
复制
if ($group_id==0) {
echo 'No group selected';
return false;
exit;
}

下面是jquery代码:

代码语言:javascript
运行
复制
$(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“。

谢谢你的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-16 10:58:03

jQuery ajax方法中的错误选项是针对错误连接、超时、无效url等性质的错误。这不是你所想的那种错误。

大多数人都是这样做的……

php

代码语言:javascript
运行
复制
if ($group_id == 0) {
echo json_encode(array(
    'status' => 'error',
    'message'=> 'error message'
));
}
else
{
echo json_encode(array(
    'status' => 'success',
    'message'=> 'success message'
));
}

javascript

代码语言: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;
});
票数 27
EN

Stack Overflow用户

发布于 2011-09-16 11:00:54

wsanville是正确的:“成功”或“失败”是指ajax请求的成功/失败。

不过,我发现在json响应中返回信息更有用,而不是更改HTTP标头。例如,我会让postride.php像这样响应:

代码语言:javascript
运行
复制
$error = false;
if ($group_id==0) {
    $error = 'No group selected';
}
$response = array('error'=>$error);
echo json_encode($response);

然后在JS的"success“回调中,我会这样做:

代码语言:javascript
运行
复制
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
    }
票数 3
EN

Stack Overflow用户

发布于 2011-09-16 10:49:08

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

您应该在$group_id为0时设置4xx status code,方法是将echo调用替换为对header的调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7439606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档