Реально, я должен написать учебник для этого, потому что вокруг не так много документации.Если вы хотите использовать новое автозаполнение jQuery в jQuery-UI 1.8, то вот как вы это делаете.
Лично я использовал общий веб-обработчик.Я предполагаю, что они лучше, потому что они не проходят через обычный конвейер запросов и вместо этого имеют только два «элемента», свойство и подпрограмму с именем ProcessRequest
.
.Я делаю это, я написал хранимую процедуру, которая принимает набор аргументов, чтобы определить что автозаполнение я хочу.Например, если я хочу использовать автозаполнение для перечисления некоторых стран, или я хочу использовать его для перечисления имен сотрудников, тогда я передаю определенную строку запроса, чтобы определить что я хочу вернуть.Это делает его очень гибким.
<%@ WebHandler Language="VB" Class="Autocomplete" %>
Imports System
Imports System.Web
Imports System.Collections.Generic
Imports System.Web.Script.Serialization
Public Class Autocomplete : Implements IHttpHandler
Public Class AutocompleteItem
Public id As String
Public value As String
End Class
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Response.ContentType = "text/plain"
Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("YourConnectionString").ToString)
Dim cmd As New SqlCommand("YourStoredProcedure", conn)
cmd.CommandType = CommandType.StoredProcedure
With cmd.Parameters
.Add(New SqlParameter("@List", 22, 10, 1, False, 0, 0, "", 512, context.Request.QueryString("ListType")))
.Add(New SqlParameter("@Code", 22, 12, 1, False, 0, 0, "", 512, context.Request.QueryString("term")))
.Add(New SqlParameter("@Top", 16, 0, 1, False, 0, 0, "", 512, context.Request.QueryString("Top")))
End With
conn.Open()
Dim results As New StringBuilder()
Dim dr As SqlDataReader = cmd.ExecuteReader
Dim items As New List(Of AutocompleteItem)
Dim serializer As New JavaScriptSerializer()
While dr.Read
Dim autocomplete As New AutocompleteItem
autocomplete.id = dr(0)
autocomplete.value = dr(1)
items.Add(autocomplete)
End While
Dim arrayJson As String = serializer.Serialize(items)
context.Response.Write(arrayJson)
conn.Close()
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
Я уверен, что есть много других способов сделать это, но это только то, что сработало для меня.Я использую AutocompleteItem CDT, потому что именно именованные переменные используются в автозаполнении jQuery.По умолчанию он использует id
и value
.Вы можете указать все, что захотите, но затем вам придется самостоятельно форматировать элементы, используя события, предоставленные в jQuery.
К счастью .NET позволяет сериализовать данные, но вы можете сделать это и в PHPиспользуя json_encode
.Вы можете найти пример PHP в jQuery UI.
Наконец, вот jQuery, который я использовал.У меня нулевая задержка, потому что это быстрый локальный сервер.
<script type="text/javascript">
$(function() {
$("#txtClient").autocomplete({
source: "/intranet/common/scripts/Autocomplete.ashx?ListType=Addresses",
minLength: 2,
delay: 0
});
});
</script>
Надеюсь, это поможет вам при использовании автозаполнения jQuery UI 1.8.
EDIT Если у кого-нибудь есть рекомендации по улучшению универсального обработчика, не стесняйтесь показывать мне.Я замечаю, что каждый раз заново создаю экземпляр объекта AutocompleteItem, однако, если вы этого не сделаете, он по какой-то причине сохранит старые значения, несмотря на повторную инициализацию переменных с новыми значениями.Приветствия.