出现此错误:
TypeError:无法读取未定义的属性“length”
对于此代码:
var getSuggestions = function(query) {
searchService.getSuggestions(query).then(function(es_return){
var suggestions = es_return.suggest.phraseSuggestion;
var results = es_return.hits.hits;
if (suggestions.length > 0) {
$scope.autocomplete.suggestions = suggestions;
}
else {
$scope.autocomplete.suggestions = [];
}
if (results.length > 0) {
$scope.autocomplete.results = results;
}
else {
$scope.autocomplete.results = [];
}
if (suggestions.length > 0 || results.length > 0) {
$scope.showAutocomplete = true;
}
else {
$scope.showAutocomplete = false;
}
});
};
特别是在第一个if语句中,我不明白为什么?需要一些新鲜的眼睛来告诉我我做错了什么。
答案 0 :(得分:1)
我认为你需要一些更好的空值处理。使用Suggestion.length > 0
无法评估>
null,对吧?所以可能使用布尔代替(或两者)。
if (Suggestion.length){
//do stuff
}
答案 1 :(得分:0)
尝试从开发人员控制台调试代码。
您可能应该es_return.hits.hits
重拍到es_return.hits
。
在您的情况下,es_return.hits.hits
或suggestions
不是数组。
答案 2 :(得分:0)
您的es_return.suggest.phraseSuggestion
似乎是undefined
。您可以尝试这样:
if(suggestions != undefined)
{
if (suggestions.length > 0) {
$scope.autocomplete.suggestions = suggestions;
}
else {
$scope.autocomplete.suggestions = [];
}
}
答案 3 :(得分:0)
在我详细研究之后,我注意到我在使用ES查询时遇到了问题。这实际上只是一个错字。我在js中有phrasesuggestion
的地方,我在ES的json查询中有phrase_suggestion
,一旦我修复了它 - 它工作了!谢谢你的努力。