加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 加速自动完成的Web服务并避免过多的方法调用

发布时间:2020-12-16 03:41:06 所属栏目:asp.Net 来源:网络整理
导读:所以我的 jquery自动完成’工作’,但它有点烦躁,因为每次keydown()触发时我都调用webservice方法,所以我得到很多方法挂起,有时让“auto”工作我必须键入它和退格有点因为我假设它的返回值有点慢.我已将查询结果限制为8以最小化时间.有什么我可以做的让这个更
所以我的 jquery自动完成’工作’,但它有点烦躁,因为每次keydown()触发时我都调用webservice方法,所以我得到很多方法挂起,有时让“auto”工作我必须键入它和退格有点因为我假设它的返回值有点慢.我已将查询结果限制为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

我敢肯定,我只是在解决这个问题,或者没有更好地平衡通话或其他事情.

非常感激!

解决方法

首先,你必须调整你的查询.你没有使用参数化查询,所以你只是在乞求 SQL injection攻击.

再一次,你必须先修复它!

完成后,使用“延迟”值.我假设在将查询发送到服务器之前,它在键盘之间等待的时间是多少?您希望它等待您的用户暂停键入,然后发送请求,以避免使用无关的调用使服务器超载.

你也应该使用try..catch..finally并在完成后处理你的连接.

顺便说一句,如果您的查询执行效果不佳,请尝试在该列上添加索引.如果你没有索引,’赞’语句很糟糕……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读