对ajax .post调用错误的空响应

时间:2016-01-31 13:16:02

标签: javascript jquery ajax

我正在进行ajax调用以删除SQL条目。如果找到并删除了该条目,则返回带有该消息的HTTP代码200,该条目已被删除。因此,它跳转到 .done 部分,并与 DONE 一起打印我的消息。 在这种情况下,找不到该条目,我想跳转到 .fail 部分,因此我返回HTTP代码400并显示我的消息,该条目未找到。它打印 ERROR ,但消息始终为空。 如果我在chrome的控制台中检查ajax调用的返回,我会看到我的消息以及代码400。

$.post( 'ajax/project.php', data )
    .fail(function(res) {
        $( "#info" ).html("ERROR");
    })

    .done(function(res) {
        $( "#info" ).html("DONE");
    })

    .always(function(res) {
        $( "#debug" ).html(res);
    });

任何解决方案都会抛出错误以跳转到 .fail 但收到我的错误消息?我通过这样的错误:

function myError( $msg, $code=200, $die=true) {
    http_response_code($code);
    echo $msg;
    if($die)
        die();
}

我对 myError 的调用如下所示:

if(!$stmt->affected_rows)
    myError('Project #'.$pid.' not found', 400);

EDIT2: 正如您在下面的屏幕截图中看到的,使用HTTP代码200它只返回我的消息,在HTTP代码400中它返回一个对象中的消息。看起来我必须做一个解决方法来捕获可能的回报,但我真的不明白为什么它的行为不同。

screenshot of the console of chrome

编辑1:刚刚发现,如果我通过警告(res)提醒结果; 部分我得到错误案例中的[object Object] 而不是我的消息。

1 个答案:

答案 0 :(得分:0)

正如您在Chrome控制台的屏幕截图中看到的那样,服务器响应在成功(200)和错误(400/500)的情况下是不同的,但我不知道为什么......

Screenshot of console

然而,这是一个肮脏的黑客,但它现在有效。

$.post( 'ajax/project.php', data )
    .fail(function(res) {
        $( "#info" ).html("ERROR");
    })

    .done(function(res) {
        $( "#info" ).html("DONE");
    })

    .always(function(res) {
        console.log(res);
        if(res instanceof Object)
            $( "#debug" ).html(res.responseText);
        else
            $( "#debug" ).html(res);
    });

如果有人能给我一个更好的例子来解决这个问题,我会很高兴:)