How to get jQuery ajax to execute error function
我环顾四周并按照这篇文章的说明进行操作,但仍然无法执行
这显然是我的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"}'; } } |
作为当前的代码,它只会输出
您需要发送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字符串,而是使用内置的
也就是说,虽然发送适当的状态代码似乎是一个好主意,但您可能会发现总是返回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; } |