如何从servlet接收响应为jj作为ajax json响应

时间:2017-07-27 02:15:16

标签: json ajax jsp servlets ajax-request

我向servlet发送ajax请求,而servlet正在给json对象。但是在ajax回应中,我没有收到josn的回复。我把警报和日志方法检查响应来成功方法。但我甚至没有得到警报/日志。

Jsp Ajax请求/响应:

 $(document).ready(function() {
          $("#searchCntrBtn").click(function(event) {
            event.preventDefault();
            $.ajax({
                type: 'GET',
                dataType: "json",
                url: '/<%=si.webContext%>/servlet/webAdmin.WebAdminGetCntrDetailsServlet',
                success: function(data) 
                {
                    var json = JSON.parse(data);

                    console.log("success", json);
                   // $('#myModal').show();
                   // $('#modalContent').show().html(data);
                }
            });
          })
        })

Servlet: -

response.setContentType("application/json");
          response.setCharacterEncoding("UTF-8");
          PrintWriter out = response.getWriter();
          String jsondata = new Gson().toJson(cntrs);

         // out.write(json);
          response.getWriter().write(jsondata);

          out.print(jsondata);
          System.out.println("JSON data---->"+jsondata);
          out.flush();

不确定这里出了什么问题但是响应没有达到jsp中的成功功能。你能帮帮我吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

在ajax success方法中使用代码

var json = jQuery.parseJSON(data);
console.log("success", json);

并在servlet中编写代码

Gson gson = new Gson();
JsonElement element = gson.toJsonTree(<Object_to_be_passed>);
out.write(element.toString());

并且您还必须在servlet中导入两个包com.google.gson.Gsoncom.google.gson.JsonElement

如果在json中传递模型类,请使用变量名来访问ajax中的数据

就像您的模型类Address包含字段namephone一样 你应该在ajax中编写代码json.name&amp; json.phone

实施例

  

的index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script src="jquery-3.2.1.js"></script>
        <title>Ajax Sample</title>
    </head>
    <body>
        <div>
            <textarea id="text"></textarea>
            <button onclick="load()">Load Now</button>
        </div>
        <script>
            function load() {
                $.ajax({
                    url: "GetData",
                    type: 'POST',
                    success: function (data, textStatus, jqXHR) {
                        alert(data);
                        var json = jQuery.parseJSON(data);
                        document.getElementById("text").innerHTML = 'Name: ' + json.name + ' & Phone:' + json.phone;
                    }
                });
            }
        </script>
    </body>
</html>
  

Index.java servlet

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Chirag
 */
public class Index extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter writer = response.getWriter()) {
            Gson gson = new Gson();
            JsonElement element = gson.toJsonTree(new Address("Chirag", "123456"));
            writer.write(element.toString());
        }
    }

    class Address {

        private final String name;
        private final String phone;

        public Address(String name, String phone) {
            this.name = name;
            this.phone = phone;
        }

        public String getName() {
            return name;
        }

        public String getPhone() {
            return phone;
        }

    }

    @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);
    }

    @Override
    public String getServletInfo() {
        return "Get Ajax Result";
    }

}
  

我使用部署描述符来创建servlet地址GetData。   遵循web.xml的剪辑部分

<servlet>
    <servlet-name>Index</servlet-name>
    <servlet-class>Index</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Index</servlet-name>
    <url-pattern>/GetData</url-pattern>
</servlet-mapping>

此代码将值放在html中的textarea中,并发出从servlet到jsp的传递数据的警告。

希望它有所帮助.. :)

答案 1 :(得分:0)

请检查问题发生的位置。 ajax调用是否到达servlet?在servlet类中给出System.out.println语句,以检查它是否到达那里。

如果发生这种情况并且响应没有回复,那么这意味着响应没有以正确的格式出现。如果出现问题,请使用@chirag中提到的GSON。