【问题标题】:Autcomplete using Jquery Ajax in JSP在 JSP 中使用 Jquery Ajax 自动完成
【发布时间】:2013-03-19 00:17:57
【问题描述】:

我正在尝试关注this 示例 我在 JSP 页面中有以下内容

(getData.jsp)

Department t = new Department ();    
    String query = request.getParameter("q");    
    List<String> tenders = t.getDepartments(query); 

    Iterator<String> iterator = tenders.iterator();
    while(iterator.hasNext()) {
        String deptName= (String)iterator.next();
        String depto = (String)iterator.next();
        out.println(deptName);
    }

如何在 Jquery autcomplete 中使用上述内容?当我尝试时没有输出。

我的 Jquery 自动完成代码

 <script>
$(function() {

$( "#dept" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "getData.jsp",
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 12,
name_startsWith: request.term
},
success: function( data ) {
response( $.map( data.<??>, function( item ) {
return {
label: item.name + (item.<??> ? ", " + item.<??> : "") + ", " + item.<??>,
value: item.name
}
}));
}
});
},
minLength: 2,
select: function( event, ui ) {
alert(ui.item.label);
}
});
});
</script>

【问题讨论】:

    标签: json jsp jquery autocomplete


    【解决方案1】:

    您的回复是 JSON 格式吗?

    这是我在使用 Jquery UI 自动完成时所做的:

    1. 创建一个类,其参数是您说 item.name 时将使用的参数

      public string Pam1{ get; set; }
      
      public string Pam2{ get; set; }
      
      public string Pam3{ get; set; }
      
      
      public SomeResponse(string SomePam)
      {
          // Pam1 = ???
          // Pam2 = ???
          // Pam3 = ??? 
      }
      
    2. 在你的处理程序中:

          context.Response.ContentType = "application/json";
          string query = (string)context.Request.QueryString["query"];
          var json = new JavaScriptSerializer();
      
          context.Response.Write(
              json.Serialize(new SomeResponse(query))
          );
      
          context.Response.Flush();
          context.Response.End();
      

    编辑

    1. javascript(这里是一个示例,用户可以选择多个选项,用逗号分隔。如果您不想要,请将其删除。) txt_autocomplete 是 TextBox 的类。

      $(function () {
          function split(val) {
              return val.split(/,\s*/);
          }
      
          function extractLast(term) {
              return split(term).pop();
          }
      
          $(".txt_autocomplete")
          // don't navigate away from the field on tab when selecting an item
          .bind("keydown", function (event) {
              if (event.keyCode === $.ui.keyCode.TAB &&
                  $(this).data("ui-autocomplete").menu.active) {
                  event.preventDefault();
              }
          })
              .autocomplete({
              source: function (request, response) {
                  $.getJSON("handlers/autocomplete.ashx?query=" + extractLast(request.term), {
                      term: extractLast(request.term)
                  }, response);
              },
              search: function () {
                  var term = extractLast(this.value);
                  if (term.length < 2) {
                      return false;
                  }
              },
              focus: function () {
                  return false;
              },
              select: function (event, ui) {
                  var terms = split(this.value);
                  terms.pop();
                  terms.push(ui.item.Pam1);
                  terms.push("");
                  this.value = terms.join(", ");
                  console.log("Pam1 is :" + ui.item.Pam1 + " Pam2 is: " + ui.item.Pam2 + " Pam 3 is : " + ui.item.Pam3);
                  return false;
              }
          });
       });
      

    【讨论】:

    • enb081 您能否提供更多有关 Handler 的信息?就像这里Request.QueryString["query"]; query 到底是什么?我应该在哪里获取数据库结果?还是应该在SomeResponse 类中?任何样本都会有真正的帮助。赞赏。
    • 查询是自动完成文本框的文本。结果将根据用户键入的文本显示。在您的 ajax 请求中,url 可以是 url:"getData.jsp?query=" + $('#TextBox1').val();
    • 根据用户输入的内容自动完成的结果如何?是否连接到数据库?所有这些都将在响应类中处理,例如Pam1 = GetValueFromDataBase(SomeParam)
    • 是的,自动完成文本框中的文本基于用户键入的值。那么Pam1 = GetValueFromDataBase(SomeParam) 会根据参数文本获取数据库中的所有结果吗?
    • 例如,您在文本框中输入了用户的电子邮件。您进行查询,其中用户电子邮件类似于 '%" + query + "%'。如果您想在自动完成中显示电子邮件,只需选择电子邮件,并使 Pam1 等于电子邮件,或者您可以选择用户名 + ''(类似 gmail)。在 js 中我们写了 terms.push(ui.item.Pam1);这意味着这将出现在自动完成条款中。您可以将它们用于其他目的的其他参数,例如具有给定电子邮件的用户的 ID 等。
    猜你喜欢
    • 2018-07-23
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2013-06-02
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多