我有这段代码从数据库执行自动完成功能。 如果输入不在数据库中,如何显示错误消息?
这是我的JS代码:
$('#txt_fname').autocomplete({
source: function( request, response ) {
$.ajax({
url : 'under the hood/rehabCreateAjax.php',
dataType: "json",
method: 'post',
data: {
name_startsWith: request.term,
type: 'country_table',
row_num : 1
},
success: function( data ) {
response( $.map( data, function( item ) {
var code = item.split("|");
return {
label: code[0],
value: code[0],
data : item
}
}));
}
});
},
autoFocus: true,
minLength: 0,
select: function( event, ui ) {
var names = ui.item.data.split("|");
$('#txt_mname').val(names[1]);
$('#txt_sname').val(names[2]);
$('#txt_nickname').val(names[3]);
$('#txt_stuNum').val(names[4]);
}
});
这是我的PHP代码:
require_once '../connection/dbConn.php';
if($_POST['type'] == 'country_table'){
$row_num = $_POST['row_num'];
$name = $_POST['name_startsWith'];
$query = "SELECT stu_fname, stu_mname, stu_sname, stu_nickname, student_id FROM student
where (UPPER(stu_fname) LIKE '".strtoupper($name)."%') or (UPPER(stu_mname) LIKE '".strtoupper($name)."%') or
(UPPER(stu_sname) LIKE '".strtoupper($name)."%') or (UPPER(stu_nickname) LIKE '".strtoupper($name)."%')";
$result = mysqli_query($conn, $query);
$data = array();
while ($row = mysqli_fetch_assoc($result)) {
$name = $row['stu_fname'].'|'.$row['stu_mname'].'|'.$row['stu_sname'].'|'.$row['stu_nick name'].'|'.$row['student_id'].'|'.$row_num;
array_push($data, $name);
}
echo json_encode($data);
}
顺便一提。。我试图在我的PHP代码中加入else。不工作。
如果我理解正确,您希望响应空结果集,而不是某种服务器错误。如果是这种情况,您应该将其包含在success
回调中。只需检查客户端代码中是否有 data
数组包含项并做出相应的响应:
success: function( data ) {
if (data.length) {
response( $.map( data, function( item ) {
var code = item.split("|");
return {
label: code[0],
value: code[0],
data : item
}
}));
} else {
console.log("no results");
}
}
@Koogle 建议的error
回调不是用于此目的的,您绝对不应该从服务器返回 404
,该仅在找不到 url 本身时使用(或者就此而言,500
,这意味着内部服务器错误)。
error
回调表示从服务器获取响应的低级别失败,如果请求失败,则由JQuery
自动运行。不应通过返回成功请求的错误代码来强制运行它 ( 200
)。您所指的错误是高级别的,因为它源于代码的固有逻辑,而不是出于任何原因执行代码本身的客观失败。
因此,在您的情况下,标签error
取决于您感知代码逻辑的方式。 例如,如果您在表中筛选结果并且过滤器不返回任何结果,则这几乎不能算是错误。但是,如果您期望请求始终返回至少一个结果,那么error
可能是合理的,尽管我相信exception
是更准确的术语。
您可以在 php 脚本中使用 HTTP 错误消息进行响应,并在 JS 中按如下方式处理错误:
$.ajax({
url : 'under the hood/rehabCreateAjax.php',
dataType: "json",
method: 'post',
data: {
name_startsWith: request.term,
type: 'country_table',
row_num : 1
},
success: function( data ) {
response( $.map( data, function( item ) {
var code = item.split("|");
return {
label: code[0],
value: code[0],
data : item
}
}));
error: function (response) {
// Handle error here
console.log(response);
}
}
PHP 应该是这样的:
$query = "SELECT stu_fname, stu_mname, stu_sname, stu_nickname, student_id FROM student
where (UPPER(stu_fname) LIKE '".strtoupper($name)."%') or (UPPER(stu_mname) LIKE '".strtoupper($name)."%') or
(UPPER(stu_sname) LIKE '".strtoupper($name)."%') or (UPPER(stu_nickname) LIKE '".strtoupper($name)."%')";
$result = mysqli_query($conn, $query);
$data = array();
while ($row = mysqli_fetch_assoc($result)) {
$name = $row['stu_fname'].'|'.$row['stu_mname'].'|'.$row['stu_sname'].'|'.$row['stu_nick name'].'|'.$row['student_id'].'|'.$row_num;
array_push($data, $name);
}
// Respond with error
if($data.length() == 0) {
http_response_code(500);
echo "No such entry";
return;
}
echo json_encode($data);