如何让jQuery ajax执行错误函数

14 浏览
0 Comments

如何让jQuery ajax执行错误函数

我已经查看了并按照这篇帖子中的说明进行操作,但仍然无法执行error函数。我想要做的是让我的PHP脚本返回errorsuccess以及一条消息。最终,将从数据库返回的数据放入div中,但现在我只需要让错误处理工作起来。我希望这里有人可以帮助我。我在下面包含了我的代码。

显然,这是我的AJAX请求。

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

这是将作为JSON返回错误和消息的PHP函数

function getSerialNumber() {
    $serial = $_POST['serial'];
    $product = new Inventory;
    if($product->GetSerial($serial)) {
        $productInfo = $product->GetSerial($serial)->first();
        echo '{"error": false, "message": "成功获取序列号"}';
    } else {
        echo '{"error": true, "message": "获取序列号失败"}';
    }
}

当前代码只会不断输出SUCCESS,而不管是否真的有错误。

0
0 Comments

问题的原因是在进行Ajax请求时,需要设置一个不为200的HTTP状态码。此外,在发送JSON数据时,需要正确设置Content-Type,并且避免手动构建JSON字符串,而是使用内置的json_encode函数。同时,使用die()或exit()而不是echo来结束程序,以避免意外的额外输出。

解决方法是根据需要的结果选择合适的状态码。如果希望返回错误信息,可以设置不为200的状态码,并使用json_encode函数将错误信息转换为JSON字符串返回。如果希望返回的是正常的响应数据,可以始终返回200,并在错误处理中解析响应结果。选择哪种方式取决于具体需求。

代码示例:

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

0
0 Comments

问题出现的原因:在jQuery的ajax方法中,如果发生错误,会执行error回调函数。但是在给出的代码中,并没有明确设置error回调函数的具体操作,导致无法正确处理错误情况。

解决方法:需要在ajax方法中添加error回调函数,并在其中定义错误发生时的具体操作。可以在控制台中输出错误信息,或进行其他适当的处理。

整理后的文章如下:

有时候我们在使用jQuery的ajax方法时,希望能够正确处理错误情况,但却发现error回调函数并没有执行。下面我们来看一下这个问题出现的原因以及解决方法。

一种解决方法是在后端设置错误。还有一种方法是在success回调函数中处理逻辑错误。

success: function(data, textStatus, jqXHR) {
    if ( data.error == 'false' ) 
        console.log('success');
    else
        console.log('error');
},

如果不对后端进行更改,整个函数可能如下所示:

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

通过给ajax方法添加error回调函数,并在其中定义错误发生时的具体操作,我们就可以正确处理错误情况了。可以在控制台中输出错误信息,或进行其他适当的处理。

0