关于javascript:如何让jQuery ajax执行错误功能

How to get jQuery ajax to execute error function

我环顾四周并按照这篇文章的说明进行操作,但仍然无法执行error功能。 我想要做的是让我的PHP脚本返回errorsuccess以及消息。 最终它将是从数据库返回的数据,它将放在div中,但是现在我只需要让错误处理工作。 我希望有人可以帮助我解决这个问题。 我在下面提供了我的代码。

这显然是我的AJAX请求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function getProductInfo() {
    if($("#serialNumber").val() != '') {
        serialNumber = $("#serialNumber").serialize();
        $.ajax({
            type:"POST",
            url: 'post.php',
            data: serialNumber +"&getSerialNumber=" + 1,
            dataType: 'json',
            success: function(data, textStatus, jqXHR) {
                console.log("SUCCESS");
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log("ERROR");
            }
        });
    }
}

这是我的php函数,它将以JSON的形式返回错误和消息

1
2
3
4
5
6
7
8
9
10
11
function getSerialNumber() {
    $serial = $_POST['serial'];
    $product = new Inventory;

    if($product->GetSerial($serial)) {
        $productInfo = $product->GetSerial($serial)->first();
        echo '{"error": false,"message":"Successfully got serial number"}';
    } else {
        echo '{"error": true,"message":"failed to get serial number"}';
    }
}

作为当前的代码,它只会输出success,无论它是否确实有错误。


您需要发送200以外的http状态代码:

1
2
3
4
5
6
7
8
if($product->GetSerial($serial)) {
    $productInfo = $product->GetSerial($serial)->first();
    header('Content-Type: application/json', true, 200);
    die(json_encode(["error"=> false,"message"=>"Successfully got serial number"]));
} else {
    header('Content-Type: application/json', true, 400);
    die(json_encode(["error"=> true,"message"=>"failed to get serial number"]));
}

此外,在发送json时,相应地设置内容类型,并且从不尝试手动构建json字符串,而是使用内置的json_encode函数,并且最好使用die()exit()而不是,以避免任何意外的额外输出

也就是说,虽然发送适当的状态代码似乎是一个好主意,但您可能会发现总是返回200并解析响应更容易,并保留错误处理程序以应对意外错误


一种选择是在后端设置错误。
另一个是关注你的逻辑错误的成功ajax方法。

1
2
3
4
5
6
success: function(data, textStatus, jqXHR) {
                if ( data.error == 'false' )
                    console.log('success');
                else
                    console.log('error');
            },

因此,如果没有后端更改,整个功能可能如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function getProductInfo() {
    var result;
    if($("#serialNumber").val() != '') {
        serialNumber = $("#serialNumber").serialize();
        $.ajax({
            type:"POST",
            url: 'post.php',
            data: serialNumber +"&getSerialNumber=" + 1,
            dataType: 'json',
    success: function(data, textStatus, jqXHR) {
                    if ( data.error == 'false' )
                        {
                            console.log('success');
                            result = data.message;
                         }
                    else
                        {
                            console.log('error');
                            result = data.message;
                         }
                },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log("ERROR");
            }
        });
    }
    return result;
}