簡體   English   中英

無法讓 jQuery AutoComplete 與外部 JSON 一起使用

[英]Can't get jQuery AutoComplete to work with External JSON

我正在開發一個需要 jQuery AutoComplete 的 ASP.NET 應用程序。 目前,當我在 txt63 輸入框中輸入數據時沒有任何反應(在你因為使用 txt63 之類的名稱而向我發火之前,我知道,我知道......但這不是我的電話:D )。

這是我的 javascript 代碼

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js" type="text/javascript"></script>
<script src="http://jquery-ui.googlecode.com/svn/tags/latest/external/jquery.bgiframe-2.1.1.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/i18n/jquery-ui-i18n.min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">

var theSource = '../RegionsAutoComplete.axd?PID=<%= hidden62.value %>'
$(function() {
  $('#<%= txt63.ClientID %>').autocomplete({
    source: theSource,
    minLength: 2,
    select: function(event, ui) {
      $('#<%= hidden63.ClientID %>').val(ui.item.id);
    }
  });
});

這是我的 HTTP 處理程序

Namespace BT.Handlers
    Public Class RegionsAutoComplete : Implements IHttpHandler
        Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property

        Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
            ''# the page contenttype is plain text'
            context.Response.ContentType = "application/json"
            context.Response.ContentEncoding = Encoding.UTF8

            ''# set page caching'
            context.Response.Cache.SetExpires(DateTime.Now.AddHours(24))
            context.Response.Cache.SetCacheability(HttpCacheability.Public)
            context.Response.Cache.SetSlidingExpiration(True)
            context.Response.Cache.VaryByParams("PID") = True

            Try
                ''# use the RegionsDataContext'
                Using RegionDC As New DAL.RegionsDataContext

                    ''# query the database based on the querysting PID'
                    Dim q = (From r In RegionDC.bt_Regions _
                            Where r.PID = context.Request.QueryString("PID") _
                           Select r.Region, r.ID)

                    ''# now we loop through the array'
                    ''# and write out the ressults'

                    Dim sb As New StringBuilder
                    sb.Append("{")

                    For Each item In q
                        sb.Append("""" & item.Region & """: """ & item.ID & """,")
                    Next
                    sb.Append("}")
                    context.Response.Write(sb.ToString)
                End Using

            Catch ex As Exception
                HealthMonitor.Log(ex, False, "This error occurred while populating the autocomplete handler")
            End Try
        End Sub


    End Class
End Namespace

我的 ASPX 頁面的其余部分具有適當的控件,因為我使用舊版本的 jQuery 庫。 我試圖讓它與新的一起工作,因為我聽說“開發”CDN 將過時。

任何幫助或方向將不勝感激。

好吧,經過幾個小時的努力,我讓我的 iHttpHandler 相當好地提供了數據。 如果您覺得這可能更好,請隨時發表評論

Imports System.Linq
Imports System.Collections.Generic

Namespace BT.Handlers
    Public Class RegionsAutoComplete : Implements IHttpHandler

        Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property

    Public Shared _PID As Integer

    Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
        ''# the page contenttype is plain text'
        context.Response.ContentType = "application/json"
        context.Response.ContentEncoding = Encoding.UTF8

        ''# set query string parameters into global variables'
        Dim _term As String = If(context.Request.QueryString("term") <> "", context.Request.QueryString("term"), "")
        _PID = Integer.Parse(context.Request.QueryString("PID"))
        ''# create a string builder to store values'
        Dim sb As New StringBuilder
        sb.Append("[" & vbCrLf)

        Dim item As BTRegionsList

        Try
            ''# now we loop through the array'
            ''# and write out the ressults'
            For Each item In BT.Handlers.RegionsAutoComplete.RegionsListInstance
                ''# make sure the added items are valid to the search'
                ''# we are also doing a case insensitive search'
                If item.Region.ToLower.Contains(_term.ToLower) Then
                    ''# this is actually writing out some JSON data'
                    sb.Append(vbTab & "{ ""label"": """ & item.Region & """, ""value"": """ & item.Region & """, ""id"": """ & item.Id.ToString & """ }," & vbCrLf)
                End If
            Next
        Catch ex As Exception
            ''# log any errors to the Health Monitor'
            HealthMonitor.Log(ex, False, "This error occurred while populating the autocomplete handler")
        End Try

        sb.Append("]")

        ''# write out the string builder'
        context.Response.Write(sb.ToString)

        ''# set the string builder values to zero'
        sb.Length = 0
        sb = Nothing
        item = Nothing

    End Sub

        ''# this is the instance of the BTRegionsList object'
        Friend Shared _RegionsListInstance As List(Of BTRegionsList)
        Friend Shared UsedPID As Integer ''# this is the PID of the most recent instance
        Public Shared ReadOnly Property RegionsListInstance() As List(Of BTRegionsList)
            Get
                Dim r As New List(Of BTRegionsList)
                ''# only populate the _RegionsListInstance if it is currently empty'
                If _RegionsListInstance Is Nothing Or UsedPID = _PID Then
                    Using RegionDC As New DAL.RegionsDataContext

                        ''# query the database based on the querysting PID'
                        Dim q = (From reg In RegionDC.bt_Regions _
                                Where reg.PID = Integer.Parse(HttpContext.Current.Request.QueryString("PID")) _
                                Select reg.Region, reg.ID)
                        For Each item In q
                            r.Add(New BTRegionsList(item.ID, item.Region))
                        Next
                        _RegionsListInstance = r
                    End Using

                Else
                    ''# if _RegionsListInstance is not empty'
                    ''# then we want to set our BTRegionsList to '
                    ''# equal _RegionsListInstance'
                    r = _RegionsListInstance
                End If

                ''# Set the PID for this instance'
                UsedPID = _PID

                ''# now we return our BTRegionsList'
                Return r
            End Get
        End Property

    End Class

    ''# a singleton class to store region information'
    ''# this helps us to not have to hit the database too many times'
    Public Class BTRegionsList

        Private _Region As String
        Private _ID As Integer

        Public Property Id() As Integer
            Get
                Return _ID
            End Get
            Set(ByVal value As Integer)
                _ID = value
            End Set
        End Property

        Public Property Region() As String
            Get
                Return _Region
            End Get
            Set(ByVal value As String)
                _Region = value
            End Set
        End Property

        Public Sub New(ByVal ID As Integer, ByVal Region As String)
            _ID = ID
            _Region = Region
        End Sub

    End Class
End Namespace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM