【发布时间】:2011-11-03 12:28:02
【问题描述】:
我尝试了几种不同的方法,但似乎无法成功。
在 document.ready 中的 jQuery:
$('#<%=txtSearch.ClientID %>').keyup(function() {
if ($('#<%=txtSearch.ClientID %>').val().length > 1) {
$("#<%=txtSearch.ClientID %>").autocomplete({
source: function(request, response) {
$.ajax({
url: "../cspm/s3.asmx/SearchSrn",
data: "{ 'prefixText': '" + request.term + "', count: '5' }",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function(data) { return data; },
success: function(data) {
response($.map(data.d, function(item) {
return {
value: item.keyword
}
}))
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
},
minLength: 2
});
Asp.net 标记:
<asp:Label ID="lblSearch" runat="server" Text="Search: " Width="50px" /><asp:TextBox ID="txtSearch" runat="server" Width="450px" />
服务器端网络服务代码:
<WebMethod(), System.Web.Script.Services.ScriptMethod()> _
Public Function SearchSrn(ByVal prefixText As String, ByVal count As Integer) As String()
Dim results As New ArrayList
Dim searchText As String() = prefixText.Split(New Char() {" "c})
sql = New StringBuilder()
sql.Append("select rownum,b.* from ")
sql.Append("(select distinct a.* from imsi_keyword_lookup_b a ")
sql.Append("where keyword like upper('%" + searchText(0).ToUpper() + "%') ")
For i As Integer = 1 To searchText.Length - 1
If searchText(i) <> "" Then
sql.Append("and keyword like '%" + searchText(i).ToUpper() + "%' ")
End If
Next
sql.Append("order by rank desc) b ")
sql.Append("where rownum <= 5 ")
Using rdr As System.Data.IDataReader = db.ExecuteDataReader(sql.ToString())
Dim counter As Integer
While rdr.Read
If (counter = count) Then Exit While
results.Add(rdr("keyword").ToString())
counter += 1
End While
End Using
Dim ResultsArray(results.Count - 1) As String
ResultsArray = results.ToArray(GetType(System.String))
Return ResultsArray
End Function
【问题讨论】: