簡體   English   中英

從servlet到ajax獲取數據?

[英]Getting data from servlet to ajax?

Jsp / servlet似乎比我預期的要乏味得多。 我試圖通過ajax調用servlet函數,實際上讓它將一些數據反饋回我的前端,這是一個jsp文件。

這段代碼返回我的響應為null。

這是我的servlet的一部分。 我正在嘗試(非常希望從代碼中明顯看出)讓它發送一些東西-任何東西都回到ajax。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String action = (String) request.getParameter("action");
if (action.equalsIgnoreCase("selectedhotel"))
    {

        response.setContentType("text/plain");  
        response.setCharacterEncoding("UTF-8"); 
        System.out.println("test");
        String attribute = (String) request.getParameter("hotel_id");
        System.out.println(attribute);
        List<Room> aRooms;
        aRooms = model.getRoomByHotel(Integer.valueOf(attribute));
        request.setAttribute("aRooms", aRooms);
        request.setAttribute("list", list);
        PrintWriter outPrintWriter = response.getWriter();
        outPrintWriter.write("ASDSADA");
            outPrintWriter.println("test");
    }   

還有我的JSP中的ajax:

$(function(){
$("#hotelSelector li").click(function(){        
    var hid = $(this).attr('id');

    $.ajax({ type: "GET",   
         url: "AppController?action=selectedhotel&hotel_id=1",   
         success : function(text)
         {
            alert(text);
             // This will show the values. Change "alert" for $('div#mydiv').html(value) or so
         }
    });
});
});</script>

Riiight ...所以,請解決?

如前所述,您確實需要從小處着手並逐步提高。 獲得一個簡單的“ hello world” ajax響應,然后處理更復雜的響應。 對於更復雜的數據響應,我建議您調查json(請參閱gson )以序列化Java對象,以便在響應編寫器中發回。

您應該考慮的第一件事是使用jQuery post並獲取包裝器,以使您的生活更輕松。

例如,您的html如下所示:

<h1>Hello: <span style="color:red" id="showMyName"></span></h1>
<form method="post" action="AjaxServlet" id="myForm">
    <input type="text" name="myName" />            
</form>
<button id="ajaxSubmit" type="submit">SEND</button>
<script type="text/javascript">
     $(document).ready(function() {
        $('#ajaxSubmit').on('click', function() {
        // To simplify things, wrap what you can in a form and serialize                      
        // it to send to the server.
            var myForm = $('#myForm');
            $.get(myForm.attr('action'), myForm.serialize(), function(data) {
                $('#showMyName').text(data);
            });
        });
    });
</script>

在servlet方面,您應該從一個普通的servlet開始,並且一旦確定它可以正常工作,就開始添加其他作用域。 基本的servlet應該是這樣的:

// For this example, get and post will use the same base procedures.
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
}

protected void processRequest(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        /* TODO output your response here.*/
        out.println(request.getParameter("myName"));
    } finally {
        out.close();
    }
}

發送復雜響應的一種方法是將所有數據放入某種類型的集合中,然后使用gson或其他JsonObjectMapper將其轉換為字符串。 然后,您可以將此String放入響應編寫器中,並將其發送回去,以供jQuery解析。

編輯:

我忘了提到您需要確保servlet容器也可以識別您的servlet。 如果尚未將描述符添加到web.xml,則它應具有如下條目:

<servlet>
    <servlet-name>AjaxServlet</servlet-name>
    <servlet-class>org.test.AjaxServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>AjaxServlet</servlet-name>
    <url-pattern>/AjaxServlet</url-pattern>
</servlet-mapping>

xmlhttp.responseText在javascript中用於從Servlet獲取響應。 您如何在jquery中獲得響應。 我認為問題出在響應中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM