我已经四处查看并遵循了这篇文章中的说明,但我仍然无法执行error
函数。我想做的是让我的PHP脚本返回error
或success
以及一条消息。最终,它将是从数据库返回的数据,该数据库将被放入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");
}
});
}
}
这是我的php函数,它将以JSON 的形式返回错误和消息
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状态代码
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()
而不是echo
,以避免任何意外的额外输出
也就是说,尽管发送适当的状态代码似乎是个好主意,但您可能会发现,总是返回200并解析响应,并保留意外错误的错误处理程序
一个选项是在后端设置错误。另一个是在成功时注意您的逻辑错误的ajax方法。
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;
}