2017-07-27 72 views
0

我向servlet发送ajax请求,并且servlet正在给出json对象。但在阿贾克斯的回应中,我没有收到乔斯的回应。我把警报和日志方法来检查响应成功的方法。但我甚至没有得到警报/日志。如何接收从servlet到jsp的响应作为ajax json响应

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成功的功能。你们能帮我解决这个问题吗?提前致谢。里面AJAX

回答

0

使用代码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()); 

,你也必须导入两个包com.google.gson.Gson和servlet的

com.google.gson.JsonElement如果传递json中的model类使用变量名访问ajax中的数据

一样,如果你有一个模型类Address有场namephone 你应该写在Ajax代码为json.name & 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文本区域,也使传递的数据的警报从servlet来JSP的SNIP一部分。

希望它能帮助.. :)

+0

dataType:“json”在ajax有时会产生问题。 – Chirag

0

做检查哪里出了问题发生。 ajax调用是否到达servlet?在servlet类中给出System.out.println语句来检查它是否到达那里。

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