2016-08-03 2 views
-2

私は非常に必死です!TypeAheadはクエリ結果を表示しません

Bootstrap Typeaheadでこの問題が発生しました。

HTMLマークアップ:

<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呼び出しの後、私はconsolleで、この配列を取得:

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

問題は次のとおりです。何も見えません。(何も表示されません。先読みは機能しません。コンソールで

は、私はそれを修正するにはどうすればよい

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

このエラーが出ますか?

私はブートストラップ3を使用しています。最後のTypeahead jsソース。

答えて

0

先入観では、データを取得するためのBloodhoundはajaxではありません。先行入力のための [email protected]

そして、ここでいくつかの例:TypeAhead Examples

+0

は、私はあなたのコードのすべてを読んでAJAX呼び出しの成功を理解することはできませんが、私は私のtypehead機能でそれを使用する方法を理解していない - 私の愚見で

は、問題は、入力されていますtagsinput関数の中で(私のコードのように)使用してください。私にもっと助けてもらえますか?多くのありがとう.. –

+0

あなたは、私のコードに見られるような型打ち関数を使用して、APIで文書化されているような動作を指定するだけで、tagsinput関数を使用する必要はありません。 –

+0

私のページにあなたのコードを入れた場合、私はこのエラーを受け取ります:bloodhoundは定義されていません –

1

ジェームズ、今、私の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; 
     }); 

:あなたのコードは次のようなもののようになります。

$('#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); 

は、我々は問題を解決することはできますか?タグは

関連する問題