【问题标题】:How should I get the Ajax response from the servlet?我应该如何从 servlet 获得 Ajax 响应?
【发布时间】:2012-02-07 01:36:03
【问题描述】:

我在按键后收到来自客户端的 Ajax 请求。 servlet 返回一个字符串。

我应该如何在客户端获取这个字符串?它应该在客户端的"," 上拆分并显示列表。我们正在使用 Velocity 来呈现 HTML。

Servlet 代码:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String acInfo = request.getQueryString();
    SomeDAO dao = new SomeDAO();
    ArrayList<String> results = dao.acResults(acInfo);
    StringBuilder sb = new StringBuilder();
    int count = 0;
    for (String acResult : results) {
        sb.append(acResult);
        count++;
        if (count == results.size()) {
            break;
        }
        sb.append(',');
    }
    out.println(sb);
    out.close();
}

【问题讨论】:

  • 来自 Ajax 查询的结果?这取决于您如何发出请求(希望不使用原始 JavaScript)。
  • @dave Newton 从 ui 发送的请求是一个简单的字符串,例如“li”,我没有构建任何查询。原始 Javascript 是什么意思?
  • @DaveNewton 我们在前端使用 jQuery
  • 什么请求不相关,它是如何制作的。 “原始 JavaScript”意味着没有框架。
  • 那是什么问题呢?显示带有成功回调的 jQuery 代码。

标签: java javascript jquery servlets


【解决方案1】:

听起来像是一个简单的 jQuery ajax 响应场景 - 你不能用以下性质的代码来处理响应吗?

var responseText = '';
$.ajax({ type: "GET",   
         url: "/YourServletURL",   
         success : function(text)
         {
             responseText = text;
         }
});

//alert response or process it or display somewhere
alert(responseText);

【讨论】:

  • @pushya 请注意,此代码很可能不是您想要的,因为它是异步的,并且不是规范的 Ajax/jQuery 模式。以此为例,会滋生坏习惯。
  • @DaveNewton:你可能是想说“因为它是同步的”?
  • 所有,目的是展示处理响应的使用场景 - @pushya - 不要复制粘贴上面的代码以供您实现。请注意,我说的是“遵循自然的代码”
【解决方案2】:

不要使用“async: false”,否则会失去所有 AJAX 的含义。 在成功方法中做所有你想做的事情。要按','分割,只需使用 split() 并轻松迭代数组使用 $.each()

$.ajax({ type: "GET",   
     url: "/YourServletURL",   
     success : function(text)
     {
         var list = text.split(',');
         $.each(list, function(index, value) { 
          alert(index + ': ' + value); 
         });
         // This will show the values. Change "alert" for $('div#mydiv').html(value) or so
     }
});

【讨论】:

    【解决方案3】:

    如果您不使用 Jquery,那么您可以使用以下内容:

    <html>
    <head>
    <script type="text/javascript">
    function loadXMLDoc()
    {
    var xmlhttp;
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
      }
    xmlhttp.open("GET","YOUR_SERVLET_RELATIVE_URL",true);
    xmlhttp.send();
    }
    </script>
    </head>
    <body>
    
    <h2>AJAX</h2>
    <button type="button" onclick="loadXMLDoc()">Request data</button>
    <div id="myDiv"></div>
    
    </body>
    </html>
    

    【讨论】: