【发布时间】:2011-11-03 15:10:41
【问题描述】:
我正在使用 jQuery 调用 Web 服务方法来执行自动完成,但文本框的自动完成/建议下拉列表中的数据与我直接运行查询时的数据不同。
这是 document.ready 函数中的 jQuery:
$("#<%=txtSearch.ClientID %>").autocomplete({
source: function (request, response) {
$.ajax({
url: '../cspm/s3.asmx/SearchSrn1',
data: "{ 'prefixText': '" + request.term + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
response($.map(data.d, function (item) {
return {
label: item.split('-')[0],
val: item.split('-')[1]
}
}))
},
error: function (response) {
alert(response.responseText);
},
failure: function (response) {
alert(response.responseText);
}
});
},
minLength: 2
});
这是来自网络服务方法的代码:
<WebMethod(), System.Web.Script.Services.ScriptMethod()> _
Public Function SearchSrn1(ByVal prefixText As String) As String()
Dim results As New List(Of String)()
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 = 5) Then Exit While
results.Add(String.Format("{0}-{1}", rdr("keyword"), rdr("keyword")))
counter += 1
End While
End Using
Return results.ToArray()
End Function
当我输入 gif 时,我应该返回 5 个结果,但它们都在文本框的下拉部分显示 GIF。当我使用 GIF 作为关键字运行查询时,我得到:GIF-Q, GIF-160, GIF-Q180, GIF-H180, GIF-Q160。
关于为什么我没有得到正确数据的任何想法?
【问题讨论】: