我环顾四周并按照this post上的说明操作,但我仍然无法执行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
。
答案 0 :(得分:4)
您需要发送除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并解析响应更容易,并保留错误处理程序以防止意外错误
答案 1 :(得分:1)
一种选择是在后端设置错误。 另一个是关注你的逻辑错误的成功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;
}