jQuery Autocomplete和Angular http返回错误

时间:2016-12-29 12:52:13

标签: javascript jquery angularjs ajax autocomplete

所以我使用jQuery-Autocomplete为我的数据库使用ajax自动完成功能,这是我当前的代码:

HTML:

<input ng-keyup="searchCustomer()" id="customerAutocomplete" type="text">

    $scope.searchCustomer = function () {
        $http.get('/api/customers') //this is a json return
            .then(function (response) {
                console.log(response.data); //FIRST OUTPUT
                $('#customerAutocomplete').autocomplete({
                    lookup: response.data,
                    onSelect: function (suggestion) {
                        console.log(response);
                    }
                });
            }, function (error) {
                console.log(error)
            })
    }

每当我输入内容时,我的控制台中的输出是:

enter image description here

正如您所看到的,它会返回console.log,但是出现错误,并且没有自动完成显示。

jQuery-Autocomplete的使用部分中,有一部分我尝试过并且有效。

var countries = [
    { value: 'Andorra', data: 'AD' },
    { value: 'Zimbabwe', data: 'ZZ' }
];

$('#autocomplete').autocomplete({
    lookup: countries,
    onSelect: function (suggestion) {
        alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
    }
});

但每当我从http调用中更改我自己数据的countries变量时,我仍然会收到错误。

我检查了库的第85行

enter image description here

并且它是return suggestion.value.toLowerCase().indexOf(queryLowerCase) !== -1;

所以我的第一个猜测是JSON.stringify response.data,然后我明白了:

enter image description here

所以它也没有用。任何帮助将不胜感激..

1 个答案:

答案 0 :(得分:0)

根据jQuery-Autocomplete documentation来自服务器的响应必须是遵循JavaScript对象的JSON格式,如下所示:

{
  // Query is not required as of version 1.2.5
  "query": "Unit",
  "suggestions": [
    { "value": "United Arab Emirates", "data": "AE" },
    { "value": "United Kingdom",       "data": "UK" },
    { "value": "United States",        "data": "US" }
  ]
}

或者您需要使用transformResult函数来解析您对标准响应的API响应。

我认为,在你的情况下,它应该如下:

// HTML

<input id="customerAutocomplete" type="text">

//脚本

$('#customerAutocomplete').autocomplete({
  serviceUrl : '/api/customers', // your full api URL
  onSelect: function (suggestion) {
    console.log(response);
  },
  transformResult: function(response) {
    if(response.data.length > 0 ) {
      return {
        suggestions: $.map(response.data, function(dataItem) {
            return { value: dataItem.customer_name, data: dataItem.customer_id };
        })
      };
    } else {
      return {};
    }
  }
});