2016-08-03 2 views
-2

Я очень отчаянный!TypeAhead не отображает результаты запроса

У меня есть эта проблема с Bootstrap Typeahead.

HTML Markup:

<div class="form-group"> 
    <label for="">Recipients</label> 
    <input id="recipients" name="recipients" 
     autocomplete="off" 
     class="form-control" 
     data-role="tagsinput"> 
</div> 

JavaScript:

$('#recipientsContainer').tagsinput({ 
      allowDuplicates: false, 
      trimValue: true, 
      confirmKeys: [13, 44], 
      typeahead: { 
       hint: true, 
       highlight: true, 
       minLength: 4, 
       limit: 10, 
       source: function (query) { 
        $.ajax({ 
         url: "/app/route", 
         type: 'POST', 
         dataType: 'JSON', 
         data: {'query' : query}, 
         success: function(data) { 
          console.log(data); 
          return(data); 
         } 
        }); 
       }, 
       afterSelect: function() { 
        this.$element[0].value = ''; 
       } 
      } 
     }); 

После Ajax вызова я получаю этот массив в Пульт управления:

["Justin Demetria +393281893574", "Dylan Alea +393700488191", "Zahir Tatyana +393007841301", "Ryan Veda +393542236060", "Hunter Wanda +393393156943"] 

Проблема в том, что я ничего не вижу :(ничего не появляется. typeahead не работает.

В консоли, я получаю эту ошибку

bootstrap-tagsinput.js Uncaught TypeError: Cannot read property 'success' of undefined. 

Как я могу это исправить?

Я использую Bootstrap 3, последний источник текста Typeahead js.

ответ

0

Для использования типа headhead Bloodhound для получения ваших данных не ajax.

Ваш код должен выглядеть как-то вроде этого:

var customers = new Bloodhound({ 
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'), 
      queryTokenizer: Bloodhound.tokenizers.whitespace, 
      remote: { 
       url: '/api/customers?query=%QUERY', 
       wildcard: '%QUERY' 
      } 
     }); 

     $('#customer').typeahead({ 
      minLength: 3, 
      highlight: true 
     }, { 
      name: 'customers', 
      display: 'name', 
      source: customers 
     }).on("typeahead:select", function(e, customer) { 
      vm.customerId = customer.id; 
     }); 

Для получения дополнительной информации о Бладхаунде: [email protected]

А вот некоторые примеры для машинописного: TypeAhead Examples

+0

я прочитал весь код, но я не понимаю, как я могу использовать его в моей функции typehead usen внутри функции tagsinput (например, мой код) .. можете ли вы предоставить мне больше помощи? Большое спасибо .. –

+0

вам не нужно использовать функцию taginput, просто используйте функцию typeahead, как показано в моем коде, и укажите поведение, подобное документированному в api. –

+0

если я поместил ваш код на свою страницу, например, я получаю эту ошибку: ищейка не определена –

1

Джеймс, теперь мой Аякс вызов это:

$('#recipientsContainer').tagsinput({ 
      allowDuplicates: false, 
      trimValue: true, 
      confirmKeys: [13, 44], 
      typeahead: { 
       source: function(queryForHints) { 
        if (queryForHints.length < 4) 
         return ''; 
        var parameters = {'queryForHints': queryForHints}; 
        jQuery.ajax({ 
         url: "/app/route", 
         data: parameters, 
         type: "POST", 
         dataType: "json", 
         success: function(data) { 
          var sourceData = []; 
          for (var i = 0; i < data.length; i++) { 
           sourceData.push(data[i].text); 
          } 
          return (sourceData); 
         }, 
         error: function(data) { 
          console.log("error for xxxxx/xxxxx"); 
         }, 
         async: true 
        }); 
       } 
      } 
     }); 

Но ошибка сохраняется:

bootstrap-tagsinput.js:331 Uncaught TypeError: Cannot read property 'success' of undefined 

ошибка на самозагрузки-tagsinput.js строке 331, и я найти:

if ($.isFunction(data.success)) { 
       // support for Angular callbacks 
       data.success(processItems); 

Можно ли решить эту проблему?

по моему скромному мнению, проблема заключается в том, что ввод - метки не могут понять Успех AJAX вызова