2017-07-27 236 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。