【问题标题】:jqueryui autocomplete with json does nothing带有json的jqueryui自动完成什么都不做
【发布时间】:2020-12-27 13:16:27
【问题描述】:

BLUF:我将 jqueryui 自动完成连接到 AJAX-y JSON-y DB 查找中。它正确调用页面,并且页面返回 JSON。但是,它实际上并没有将这些结果加载到 UI 中。它似乎非常缓慢地什么都不做。

相关JS:

$(function () {
            $("#searchtext").autocomplete({
                source: function (request, response) {
                    $.getJSON("<%=ResolveUrl("~/getPeople?prefix=") %>" + request.term, function (data) {
                        response($.map(data.dealers, function (value, key) {
                            return {
                                label: value,
                                value: key
                            };
                        }));
                    });
                },
                select: function (e, i) {
                    $("#personID").val(i.item.val);
                },
                minLength: 2,
                delay: 100
            });
        });

getPeople.aspx 的代码:

    Response.Headers.Add("Content-type", "text/json")
    Response.Headers.Add("Content-type", "application/json")
    Dim prefix
    prefix = Request.QueryString("prefix")
    
    Dim PDU_CS = System.Configuration.ConfigurationManager.ConnectionStrings("PDU").ConnectionString
    Using PDU_Connection As New System.Data.SqlClient.SqlConnection()
        PDU_Connection.ConnectionString = ConfigurationManager.ConnectionStrings("PDU").ConnectionString
        Using PDU_Command As New System.Data.SqlClient.SqlCommand()
            PDU_Command.CommandText = "select id, [name] FROM vw_Staff WHERE [name] LIKE @searchtext + '%'"
            PDU_Command.Parameters.AddWithValue("@searchtext", prefix)
            PDU_Command.Connection = PDU_Connection
            PDU_Connection.Open()
            Using sdr As System.Data.SqlClient.SqlDataReader = PDU_Command.ExecuteReader()
                Dim dt As New DataTable
                dt.Load(sdr)
                Dim sData As String = JsonConvert.SerializeObject(dt)
                Response.Write(sData)
            End Using
            PDU_Connection.Close()
        End Using
    End Using

getPeople.aspx?prefix=Gibson 的实际输出

[{"id":5854,"name":"GIBSON,  NICHOLAS"}]

【问题讨论】:

  • 您想在地图中使用value.namevalue.id 吗?

标签: asp.net json jquery-ui jquery-ui-autocomplete


【解决方案1】:

建议进行两项更改:

$(function() {
  $("#searchtext").autocomplete({
      source: function(request, response) {
        $.getJSON("<%=ResolveUrl("~/getPeople?prefix=") %>" + request.term, function (data) {
          response($.map(data.dealers, function(value, key) {
            return {
              label: value.name,
              value: value.id
            };
          }));
        });
    },
    select: function(e, i) {
      $("#personID").val(i.item.value);
      return false;
    },
    minLength: 2,
    delay: 100
  });
});
  1. 由于您将对象数组传递给$.map(),因此您需要与每个对象交互,在本例中为数组的value
  2. selectui,在你的情况下,只是 i,它是 i.item.value,而不是 i.item.val

参考:https://jqueryui.com/autocomplete/#custom-data

【讨论】:

  • 我进行了您建议的更改(手动,然后复制/粘贴),但没有发现行为差异。不抛出错误,不显示自动完成。
  • @sapph 你在加载什么库?控制台中显示什么?
  • jquery-3.3.1.js、modernizr-2.8.3.js、jquery-ui-1.12.1.js、bootstrap-3.3.7.js、jquery.validate.1.19.2。 js 控制台中没有显示任何内容。
  • @sapph 您在网络控制台中看到了什么?如果没有出现,这表明 response 正在获取一个空数组。
  • 啊,我以为你指的是脚本控制台。网络显示对 getPeople.aspx?prefix=Gibson 的调用,响应为 200,正文如问题所示。
猜你喜欢
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
相关资源
最近更新 更多