【问题标题】:how to complete back end for auto complete jquery如何完成自动完成jquery的后端
【发布时间】:2012-01-13 17:13:20
【问题描述】:

我有一个文本框, 在里面我希望它自动完成。 自动完成的数据将通过数据库提供。

这是我的 Jquery:

 var data = "autocompletetagdata.aspx"
    $("#item").autocomplete({
        source: data
    });


protected void Page_Load(object sender, EventArgs e) {
   return "['word', 'hello', 'work', 'oi', 'hey']";     
} 

【问题讨论】:

    标签: jquery asp.net autocomplete


    【解决方案1】:

    试试这个:

    $("#item").autocomplete({
        source: function (request, response) {
            $.ajax({
                type: "POST",
                url: "autocompletetagdata.aspx/Search",
                data: { "search": request.term },
                contentType: "application/json; charset=utf-8",
                success: function (results) {
                    var data = $.parseJSON(results);
                    response($.map(data, function (item) { 
                        return { value: item } 
                    }))
                }
            });
        }
    });
    

    在您的代码中,将其设为网络方法:

    [WebMethod]
    public static void Search(string search)
    {
        string[] list = new [] { "word", "hello", "work", "oi", "hey" };
    
        return list.Where(x => x.StartsWith(search));
    }
    

    【讨论】:

    • +1 这是在 ASP.NET 中处理这种情况的首选方法。 [WebMethod] 属性将负责正确的 JSON 序列化。
    • ^ 同意。这避免了您将要执行的每个 AJAX 调用都需要有不同的页面。我通常有一个“ajax.aspx”页面,其中包含不同的 Web 方法来处理我需要执行的 HTML 呈现和 POST 操作......我不知道为什么这不被接受为答案,因为这正是我也会推荐。
    【解决方案2】:

    我认为你必须返回 json 格式的数据而不是逗号分隔的字符串。看看demos page,上面写着:

    数据源是一个返回 JSON 数据的服务器端脚本, 通过源选项的简单 URL 指定。

    【讨论】:

    • 保罗回答中的代码应该可以正常工作,因为它是有效的 json。您始终可以使用 Firebug 之类的东西来查看您是否真的从服务器获取此字符串。
    【解决方案3】:

    根据:http://www.srikanthtechnologies.com/blog/dotnet/jqueryautocomplete.aspx 尝试返回一个字符串列表。

    
    [WebMethod]
    public static List<string> PopSearch()
    {
     return new List<string> { "oi", "oi", "hey"};
    }
    

    【讨论】:

    • 无法使用,因为 ti 是 iso-2 c# 的一部分
    【解决方案4】:

    jQuery 自动完成需要 json 作为结果,所以这将起作用

    return "['word', 'hello', 'work', 'oi', 'hey']";
    

    对于更复杂的数据,请考虑使用JavaScriptSerializer

    【讨论】:

      【解决方案5】:

      由于似乎没有什么对您有用,请确保您已掌握基本知识:

      • 您是否同时加载了 jQuery 和 jQuery UI 库? (自动完成是 jQuery UI)
      • 您是在 DOM 就绪函数中调用 jQuery 代码吗?
      • 您可以直接在浏览器中点击您的 Web 方法并取回数据吗?

      【讨论】:

      • 所有库都包含在内,代码 id 文档已准备好,我可以加载 ajax.aspx 页面
      【解决方案6】:

      使用数据自动完成并不是那么难。首先,您需要确定您的返回类型。最简单的往往是 json 格式,所以:

      PHP 控制器结束

      // be sure to use echo, not return
      echo json_encode($yourDataAsArrayOrObject);
      

      完成该部分后,返回您的 javascript

      $("#item").autocomplete({
          // source should be a url to the controller function that returns the data
          source: 'www.yoursite.com/controller/function',
          search: function(e, ui) {}, // here you can manipulate other elements or items while the data is being retrieved,
          select: function(e, ui) { /* ui.item is item slected */ } // here you can manipluate things based on the item that was selected, for instance, save a list of sub data to another dom element
      });
      

      最后,警告

      // You will need to use ._renderItem to items as they are received by database.
      // For instance, if you want to display the dropdown items in a custom way.
      $("#item")._renderItem = function(ul, item) {  
        // the item. depends on the information you got from server
        return ul.append($("<li></li>").prepend($("<h3></h3>").text(item.label)).append($("<p></p>").text(item.value)));
      };
      

      【讨论】:

      • ewww,我手上没有水泡,太恶心了!
      • SpYk3HH:没问题,你有权选择你的喜好。请注意问题,以免浪费您和我们的时间。在为另一个开发平台发布答案之前,请查看问题的示例代码和标签。
      • 大声笑,愚蠢的评论让我知道,但说真的,不管是不是 asp,_renderItem,似乎是他正在寻找的东西,甚至他的选项设置,但是,说真的,越来越多的公司正在移动远离 asp 编程,因为它缺乏可以用简单语言完成的所有功能的可用性,并且不会对用户造成重大的“开销”。只是想一想。我曾经是 .Net 的忠实粉丝,并认为 4.0 很棒,但实际上,MS 只是跟不上网络标准,更重要的是,跟不上可移植标准。
      【解决方案7】:

      在示例中,返回的数据用单引号 (['word', 'hello', 'work', 'oi', 'hey']) 分隔,这不会产生有效的 JSON。

      只需用双引号替换单引号即可。示例:“单词”变成“单词”。根据您在服务器端构建字符串的方式,您可能需要转义双引号,例如 "[""word"",""hello"" 等

      protected void Page_Load(object sender, EventArgs e) {
         return "[""word"", ""hello"", ""work"", ""oi"", ""hey""]";     
      } 
      

      祝你好运。

      【讨论】:

        【解决方案8】:

        @Troy Barlow,你的意思显然是

        [WebMethod]
        public static string[] Search(string search)
        {
          string[] list = new[] { "word", "hello", "work", "oi", "hey" };
          return list.Where(x => x.StartsWith(search)).ToArray();
        }
        

        【讨论】:

          【解决方案9】:
           protected void Page_Load(object sender, EventArgs e)
          {
              string term = Request.QueryString["term"];
             SqlConnection myConnection = new SqlConnection(connStr);
             myConnection.Open();
             string result = "[";
             int i = 0;
             string SQL = ("select LTRIM(RTRIM(PGPRDC)) As PGPRDC FROM SROPRG SROPRG where PGPRDC like '" + term + "%'");
             SqlCommand myCommand = new SqlCommand(SQL, myConnection);
             StringBuilder sb = new StringBuilder();
             try
                {
                  SqlDataReader reader = myCommand.ExecuteReader();
                  if (reader.HasRows)
                  {
                     while (reader.Read())
                     {
                       result += "";
                       result += "\"" + reader.GetString(0) + "\"";                          
                       result += ",";
                       i += 1;
                       sb.Append(reader.GetString(0))
                                     .Append(Environment.NewLine);
                      }
                  }
                  reader.Close();
                }
             catch (Exception ex)
             {
                myConnection.Close();
             }
             result = result.Substring(0, result.Length - 1);
             myConnection.Close();
             result += "]";   
             Response.Write(result);  
          } 
          

          【讨论】:

          • -1 因为字符串连接不能保证生成有效的 JSON。您需要考虑reader.GetString(0) 的内容可能会破坏您的输出的多种方式。
          • 我会认真考虑将逻辑放入 Web 方法中,因为您最终会为您正在执行的每个 AJAX 调用提供单独的 ASPX 页面......在大型 -扩展 Web 应用程序。
          猜你喜欢
          • 1970-01-01
          • 2013-04-24
          • 1970-01-01
          • 1970-01-01
          • 2011-05-31
          • 1970-01-01
          • 1970-01-01
          • 2011-10-03
          • 2011-09-10
          相关资源
          最近更新 更多