【发布时间】:2010-06-11 19:36:43
【问题描述】:
所以我已经让我的 jquery 自动完成“工作”,但它有点烦躁,因为我每次触发 keydown() 时都会调用 web 服务方法,所以我有很多方法挂起,有时让“自动”工作我必须输入它并退格一点,因为我假设它的返回值有点慢。我已将查询结果限制为 8 以最小化时间。我能做些什么来让它变得更活泼一点吗?如果我不让它更敏感一点,这东西似乎几乎没用。
javascript
$("#clientAutoNames").keydown(function () {
$.ajax({
type: "POST",
url: "WebService.asmx/LoadData",
data: "{'input':" + JSON.stringify($("#clientAutoNames").val()) + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
if (data.d != null) {
var serviceScript = data.d;
}
$("#autoNames").html(serviceScript);
$('#clientAutoNames').autocomplete({
minLength: 2,
source: autoNames,
delay: 100,
focus: function (event, ui) {
$('#project').val(ui.item.label);
return false;
},
select: function (event, ui) {
$('#clientAutoNames').val(ui.item.label);
$('#projectid').val(ui.item.value);
$('#project-description').html(ui.item.desc);
pkey = $('#project-id').val;
return false;
}
})
.data("autocomplete")._renderItem = function (ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + "<br>" + item.desc + "</a>")
.appendTo(ul);
}
}
});
});
WebService.asmx
<WebMethod()> _
Public Function LoadData(ByVal input As String) As String
Dim result As String = "<script>var autoNames = ["
Dim sqlOut As Data.SqlClient.SqlDataReader
Dim connstring As String = *Datasource*
Dim strSql As String = "SELECT TOP 2 * FROM v_Clients WHERE (SearchName Like '" + input + "%') ORDER BY SearchName"
Dim cnn As Data.SqlClient.SqlConnection = New Data.SqlClient.SqlConnection(connstring)
Dim cmd As Data.SqlClient.SqlCommand = New Data.SqlClient.SqlCommand(strSql, cnn)
cnn.Open()
sqlOut = cmd.ExecuteReader()
Dim c As Integer = 0
While sqlOut.Read()
result = result + "{"
result = result + "value: '" + sqlOut("ContactID").ToString() + "',"
result = result + "label: '" + sqlOut("SearchName").ToString() + "',"
'result = result + "desc: '" + title + " from " + company + "',"
result = result + "},"
End While
result = result + "];</script>"
sqlOut.Close()
cnn.Close()
Return result
End Function
我确定我只是在解决这个问题,或者没有更好地平衡通话或其他事情。
非常感谢!
【问题讨论】:
-
“延迟:100”是指100ms吗?
-
是的,我不认为我在阅读 API 时会像您那样阅读它。出于某种原因,我认为延迟是要等多久才能显示建议 - 我认为这只会让我的最终用户变得更慢
-
事实证明我对延迟的使用方式是正确的。我用萤火虫把它拉起来,它仍然很快被调用,我想知道我是否应该将它更改为由函数调用的 ajax 调用,以便我可以更好地控制何时获得结果,以便我可以创建延迟。
标签: asp.net javascript jquery sql-server