为什么我在length属性上获得TypeError

时间:2015-08-31 18:27:48

标签: javascript typeerror

出现此错误:

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语句中,我不明白为什么?需要一些新鲜的眼睛来告诉我我做错了什么。

4 个答案:

答案 0 :(得分:1)

我认为你需要一些更好的空值处理。使用Suggestion.length > 0无法评估> null,对吧?所以可能使用布尔代替(或两者)。

if (Suggestion.length){
   //do stuff
}

答案 1 :(得分:0)

尝试从开发人员控制台调试代码。

您可能应该es_return.hits.hits重拍到es_return.hits

在您的情况下,es_return.hits.hitssuggestions不是数组。

答案 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,一旦我修复了它 - 它工作了!谢谢你的努力。