【问题标题】:Jquery Ajax post success/error functionJquery Ajax 发布成功/错误函数
【发布时间】:2011-09-16 02:43:46
【问题描述】:

我有一个没有被错误捕获的 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 函数。它将发布“没有选择成功的组”。

感谢您的帮助!

【问题讨论】:

    标签: jquery


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的澄清!
    • 很好,@AnthonyJack!但我认为你的意思是 dataType : 'json' 在 javascript 代码中......
    • 当然。最后一件事:我认为“json”必须用引号引起来;-)
    【解决方案2】:

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

    不过,与其更改 HTTP 标头,我发现在 json 响应中返回信息很有用。因此,例如,我会让 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
        }
    

    【讨论】:

    • Anthony Jack 发布了我首先要说的内容——如果你支持我的回答,你应该支持他的,接受他的而不是我的。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      你也可以这样使用。如果服务器正常(200)则成功,如果发生任何服务器错误(500)则失败。

      $.ajax({
          url: "postride.php",
          type: 'POST',
          data: dataString,
          datatype: 'json',
          success: function (data) { 
              successFunction(data); 
          },
          error: function (jqXHR, textStatus, errorThrown) { 
              errorFunction(); 
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2013-01-13
        • 2019-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-20
        • 2014-03-07
        • 2011-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多