библиотека jQuery автозаполнения с обратного вызова Ajax в формате JSON
Я пытаюсь найти способ использовать автозаполнение jQuery с источником обратного вызова, получающим данные через список объектов ajax json с сервера.
может кто-нибудь дать некоторые направления?
я погуглил его, но не смог найти полного решения.
4 ответа:
отличный пример в автозаполнение документов исходный код.
jQuery
<script> $(function() { function log( message ) { $( "<div>" ).text( message ).prependTo( "#log" ); $( "#log" ).scrollTop( 0 ); } $( "#city" ).autocomplete({ source: function( request, response ) { $.ajax({ url: "http://gd.geobytes.com/AutoCompleteCity", dataType: "jsonp", data: { q: request.term }, success: function( data ) { response( data ); } }); }, minLength: 3, select: function( event, ui ) { log( ui.item ? "Selected: " + ui.item.label : "Nothing selected, input was " + this.value); }, open: function() { $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" ); }, close: function() { $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" ); } }); }); </script>
HTML
<div class="ui-widget"> <label for="city">Your city: </label> <input id="city"> Powered by <a href="http://geonames.org">geonames.org</a> </div> <div class="ui-widget" style="margin-top:2em; font-family:Arial"> Result: <div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div> </div>
Если вы возвращаете сложный объект json, вам нужно изменить функцию успеха вашего автозаполнения следующим образом.
$.ajax({ url: "/Employees/SearchEmployees", dataType: "json", data: { searchText: request.term }, success: function (data) { response($.map(data.employees, function (item) { return { label: item.name, value: item.id }; })); } });
моя проблема заключалась в том, что конечные пользователи начинали вводить текстовое поле и получать предложения автозаполнения (ACP) и обновлять вызывающий элемент управления, если предложение было выбрано как ACP по умолчанию. Однако мне также нужно было обновить несколько других элементов управления (текстовые поля, выпадающие списки и т. д...) с данными, специфичными для выбора конечного пользователя. Я пытался найти элегантное решение этой проблемы, и я чувствую, что тот, который я разработал, стоит поделиться и, надеюсь, спасет вас, по крайней мере некоторое время.
WebMethod (SampleWM.aspx):
назначение:
- чтобы захватить результаты хранимой процедуры SQL Server и вернуть их в виде строки JSON вызывающему AJAX
Примечания:
- данные.GetDataTableFromSP () - это пользовательская функция, которая возвращает DataTable из результаты хранимой процедуры
- _
- Общедоступная Общая Функция GetAutoCompleteData (ByVal QueryFilterAs String) Как String
//Call to custom function to return SP results as a DataTable // DataTable will consist of Field0 - Field5 Dim params As ArrayList = New ArrayList params.Add("@QueryFilter|" & QueryFilter) Dim dt As DataTable = Data.GetDataTableFromSP("AutoComplete", params, [ConnStr]) //Create a StringBuilder Obj to hold the JSON //IE: [{"Field0":"0","Field1":"Test","Field2":"Jason","Field3":"Smith","Field4":"32","Field5":"888-555-1212"},{"Field0":"1","Field1":"Test2","Field2":"Jane","Field3":"Doe","Field4":"25","Field5":"888-555-1414"}] Dim jStr As StringBuilder = New StringBuilder //Loop the DataTable and convert row into JSON String If dt.Rows.Count > 0 Then jStr.Append("[") Dim RowCnt As Integer = 1 For Each r As DataRow In dt.Rows jStr.Append("{") Dim ColCnt As Integer = 0 For Each c As DataColumn In dt.Columns If ColCnt = 0 Then jStr.Append("""" & c.ColumnName & """:""" & r(c.ColumnName) & """") Else jStr.Append(",""" & c.ColumnName & """:""" & r(c.ColumnName) & """") End If ColCnt += 1 Next If Not RowCnt = dt.Rows.Count Then jStr.Append("},") Else jStr.Append("}") End If RowCnt += 1 Next jStr.Append("]") End If //Return JSON to WebMethod Caller Return jStr.ToString
автозаполнение jQuery (автозаполнение.aspx):
- назначение:
- выполнить Ajax Запрос к WebMethod, а затем обрабатывать ответ
$(function() { $("#LookUp").autocomplete({ source: function (request, response) { $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "SampleWM.aspx/GetAutoCompleteData", dataType: "json", data:'{QueryFilter: "' + request.term + '"}', success: function (data) { response($.map($.parseJSON(data.d), function (item) { var AC = new Object(); //autocomplete default values REQUIRED AC.label = item.Field0; AC.value = item.Field1; //extend values AC.FirstName = item.Field2; AC.LastName = item.Field3; AC.Age = item.Field4; AC.Phone = item.Field5; return AC })); } }); }, minLength: 3, select: function (event, ui) { $("#txtFirstName").val(ui.item.FirstName); $("#txtLastName").val(ui.item.LastName); $("#ddlAge").val(ui.item.Age); $("#txtPhone").val(ui.item.Phone); } }); });
$(document).on('keyup','#search_product',function(){ $( "#search_product" ).autocomplete({ source:function(request,response){ $.post("<?= base_url('ecommerce/autocomplete') ?>",{'name':$( "#search_product" ).val()}).done(function(data, status){ response(JSON.parse(data)); }); } }); });
PHP код :
public function autocomplete(){ $name=$_POST['name']; $result=$this->db->select('product_name,sku_code')->like('product_name',$name)->get('product_list')->result_array(); $names=array(); foreach($result as $row){ $names[]=$row['product_name']; } echo json_encode($names); }