jQuery 自动完成响应返回:无法读取 null 的属性“length”
2017-01-10
1048
我正在尝试创建一个函数,当“自动完成”未找到任何结果时,该函数将显示一个按钮。
PHP
echo json_encode($row_set);
JS
$( '#objNr' ).autocomplete({
source: 'php/v.php',
minLength: 2,
response: function(event, ui) {
// ui.content is the array that's about to be sent to the response callback.
if (ui.content.length === 0) {
$('#newTableBtn').removeClass('hidden');
} else {
$("#newTableBtn").addClass('hidden');
}
},
error: function(err){
console.log(err);
}
});
搜索工作正常。我得到了结果。但是当我没有结果时,我收到此消息:
Uncaught TypeError: Cannot read property 'length' of null at HTMLInputElement.response
出了什么问题?
更新 PHP
while ($row = $stmt->fetch()){
$row['id'] = $i+1;
$row_set[] = $row;//build an array
}
echo json_encode($row_set);//format the array into json data
更新 JS
response: function(event, ui) {
if (ui.content != null && ui.content.length < 1) {
$('#newTableBtn').removeClass('hidden');
console.log('if')
} else {
$("#newTableBtn").addClass('hidden');
console.log('else')
}
},
这一条清除了错误消息..但无论是否有结果,else 情况都会发生...
2个回答
经过与 @björn-c 的长时间友好讨论,我们发现问题在于在获取结果之前没有初始化数组
$row_set
。这样,json_encode 会将结果编码为
null
,自动完成会抛出错误。
因此,解决方法是在从数据库获取结果的 while 循环中使用它之前放置
$row_set = array();
。
然后就大功告成了!:)
Erenor Paz
2017-01-10
尝试此操作:
if (ui.content != null && ui.content.length < 1) {
$('#newTableBtn').removeClass('hidden');
} else {
$("#newTableBtn").addClass('hidden');
}
如果
ui.content
为空,则在您尝试获取其 length 属性时会引发异常。请确保不是。
urbz
2017-01-10