JQuery UI автозаполнение с JSON не работает
Эй, ребята, я пытаюсь понять, почему метод autocomplete()
не делает GET
, Когда я добавляю переменную в конец источника. Например:
<script>
$(document).ready(function(){
var search_input;
$('#search').keyup(function(){
search_input = ($(this).val());
console.log(search_input);
});
$('#search').autocomplete({
source: "http://192.168.33.10/app_dev.php/search/query/" + search_input,
minLength: 2
});
});
</script>
<div class="ui-widget">
<label for="search">Search</label>
<input type="text" id="search" />
</div>
Но если я удалю + search_input
из источника, он сделает GET
, Вот так..
<script>
$(document).ready(function(){
var search_input;
$('#search').keyup(function(){
search_input = ($(this).val());
console.log(search_input);
});
$('#search').autocomplete({
source: "http://192.168.33.10/app_dev.php/search/query/",
minLength: 2
});
});
</script>
<div class="ui-widget">
<label for="search">Search</label>
<input type="text" id="search" />
</div>
2 ответа:
В вашем коде функция
autocomplete
просто должна предоставить исходному параметру функцию обратного вызова.source: function( request, response ) {}
Вы можете следовать примеру для нескольких удаленных предложений по Автозаполнению пользовательского интерфейса jQuery
<script type="text/javascript"> $(function() { function split( val ) { return val.split( /,\s*/ ); } function extractLast( term ) { return split( term ).pop(); } $( "#search" ) // don't navigate away from the field on tab when selecting an item .bind( "keydown", function( event ) { if ( event.keyCode === $.ui.keyCode.TAB && $( this ).data( "ui-autocomplete" ).menu.active ) { event.preventDefault(); } }) .autocomplete({ source: function( request, response ) { $.getJSON( "http://192.168.33.10/app_dev.php/search/query/" + extractLast( request.term ), { term: extractLast( request.term ) }, response ); }, search: function() { // custom minLength var term = extractLast( this.value ); if ( term.length < 2 ) { return false; } }, focus: function() { // prevent value inserted on focus return false; }, select: function( event, ui ) { var terms = split( this.value ); // remove the current input terms.pop(); // add the selected item terms.push( ui.item.value ); // add placeholder to get the comma-and-space at the end terms.push( "" ); this.value = terms.join( ", " ); return false; } }); }); </script>
JSON, возвращаемый сервером в этом примере, будет структурирован следующим образом:
[{"id":"1544","label":"Suggestion 1","value":"Suggestion 1"}, {"id":"3321","label":"Suggestion 2","value":"Suggestion 2"}]
Несмотря на то, что вы меняете
search_input
, виджет получает только URL-адрес с начальным значениемsearch_input
(которое, вероятно, пусто).Что-то вроде этого вам нужно:
$('#search').autocomplete({ source: function (request, response) { $.get("http://192.168.33.10/app_dev.php/search/query/" + request.term, response) }, minLength: 2 });