2017-02-05 107 views
0

我使用Select2作爲自動完成功能,我正在從遠程加載列表。Select2 - API工作時不顯示下拉菜單

看一看下面的代碼:

HTML:

<div> 
    <select class="tagsSearch" style="width: 100%"> 
     <option value="2" selected="selected"></option> 
    </select> 
</div> 

的jQuery:

<script type="text/javascript"> 
$(".tagsSearch").select2({ 
placeholder: 'Search for tags', 
tags: true, 
multiple: true, 
tokenSeparators: [',', ' '], 
minimumInputLength: 2, 
minimumResultsForSearch: 1, 
ajax: { 
    url: function (params) { 
     return '/api/searchTags?text=' + params.term; 
    }, 
    dataType: "json", 
    type: "GET", 
    processResults: function (data) { 
     return { 
      results: $.map(data, function (name) { 
       return { 
        name: name, 
       } 
      }) 
     }; 
    } 
} 
}); 
</script> 

的問題:雖然網絡電話正在對網址進行的與PARAMS結果又回來了,它沒有出現在我的下拉列表中。

實際API響應(這是我從瀏覽器的網絡日誌中看到:

[{"name":"bottomline-technologies"}] 

這是前端的樣子:

enter image description here

因此API響應工作好的,我在這裏做錯了什麼?

在此先感謝

回答

0

這是固定的,這要歸功於JohnS在this的帖子中指出的內容。

問題是processResults應該返回一個ID文本變量。你將不得不把它們映射,按我下面的最終解決方案:

$(".tagsSearch").select2({ 
placeholder: 'Search for tags', 
delay: 250, 
tags: true, 
multiple: true, 
tokenSeparators: [',', ' '], 
minimumInputLength: 2, 
minimumResultsForSearch: 1, 
ajax: { 
    url: function (params) { 
     return '/api/searchTags'; 
    }, 
    dataType: "json", 
    type: "GET", 
    data: function (params) { 
     return { 
      text: params.term 
     }; 
    }, 
    processResults: function(data){ 
     return{ 
      results: $.map(data, function(obj){ 
      return { 
       id: obj.name, text: obj.name // <- this is what was done to fix the issue 
      }; 
      }) 
     }; 
    }} 
}); 

PS:這也包括了一些清理的代碼,但問題是與缺少的變量。