我在我的页面上实例化了一个调用asp.net Web服务方法的jQuery自动完成扩展程序。自动完成扩展程序连接到文本框的keyup事件。我的Web服务设置为仅返回与文本框中输入的文本匹配的前十行。
我遇到的问题很奇怪。当我输入“veriz”时,Web服务返回与该字符串匹配的十个记录,但只有前五个记录显示在自动完成控件中。但是,当我搜索“verizo”时,Web服务返回相同的10个结果,并显示所有10个结果。
有没有人见过像这样的问题?有什么建议吗?
<script type="text/javascript">
$(document).ready(function() {
$('#autocomplete').keyup(function() {
$.ajax({
type: "POST",
url: "http://localhost/dlaJQuery/lookups.asmx/doJQueryLookup",
dataType: "json",
data: "{'count':'10','type':'" + $('#seltype').val() + "','search':'" + $('#autocomplete').val() + "'}",
contentType: "application/json; charset=utf-8",
success: function(data) {
var newData = [];
$.each(data.d, function() {
newData.push({ id: this.split('|')[1], value: this.split('|')[1], label: this.split('|')[0] + ' (' + this.split('|')[1] + ')' });
});
$('#autocomplete').autocomplete({
minLength: 3,
source: newData,
focus: function(event, ui) {
$('#autocomplete').val(ui.item.label);
return false;
},
select: function(event, ui) {
$('#autocomplete').val(ui.item.label);
return false;
}
});
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
});
});
网络服务方法:
[WebMethod()]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string[] doJQueryLookup(string count, string type, string search)
{
SqlConnection objConn = new SqlConnection(ConfigurationManager.ConnectionStrings["connSys"].ConnectionString);
List<string> EntityList = new List<string>();
try
{
objConn.Open();
SqlCommand objCommand = new SqlCommand();
objCommand.Connection = objConn;
objCommand.CommandType = CommandType.StoredProcedure;
objCommand.CommandText = "dbo.csp_jquery_lookup";
objCommand.Parameters.AddWithValue("@numResults_in", count);
objCommand.Parameters.AddWithValue("@elType_in", type);
objCommand.Parameters.AddWithValue("@sSearch_in", search);
SqlDataReader objReader = objCommand.ExecuteReader();
while (objReader.Read())
{
EntityList.Add(
objReader[1] + "|" + objReader[0]
);
}
objReader.Close();
objConn.Close();
return EntityList.ToArray();
}
catch (Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
return null;
}
}