2016-05-03 10 views
0

Ich versuche, JSON-Array von Servlet zu empfangen und Daten zu einer Tabelle hinzuzufügen. Aber JSON oder Text kommen nicht zu Jsp. Ich habe viele Dinge versucht. Hier ist mein JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> 
<head> 
    <title>Search a User</title> 
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#search1').click(function() 
      { 
       var searchdata = $("#searchword").val(); 
       $.ajax({ 
        type: "GET", 
        url: "Search", //this is my servlet 
        data: {searchword :searchdata }, 
        success: function(data){ 
         alert(data); 
        } 
       }); 
      }); 

     }); 
    </script> 
</head> 
<body> 
<form method="post" class="form-horizontal"> 
    <fieldset> 


     <div class="form-group"> 
      <label class="col-md-4 control-label" for="searchword">Search a User</label> 
      <div class="col-md-5"> 
       <input id="searchword" type="text" placeholder="Add User's name" class="form-control input-md" required=""> 

      </div> 
     </div> 

     <div class="form-group"> 
      <label class="col-md-4 control-label" for=""></label> 
      <div class="col-md-3"> 
       <button id="search1" class="btn btn-block btn-success">Search</button> 
      </div> 
     </div> 

    </fieldset> 
</form> 
</body> 
</html> 

Hier versuche ich nur, um sicherzustellen, dass die Erfolgsfunktion funktioniert. Aber Alarm funktioniert nicht. Ich habe Alerts ohne String hinzugefügt, die wir vom Servlet zur Demo vorschlagen. Aber sie haben auch nicht funktioniert. Ich bin mir ziemlich sicher, dass mein Fehler auf der JSP-Seite liegt, weil ich das JSON-Array und das Servlet beim Abrufen des Suchwortes in den log4j-Protokollen sehen kann. Aber stellen Sie sicher, dass ich das Servlet auch hier hinzufügen werde.

import com.google.gson.JsonArray; 
import com.google.gson.JsonObject; 
import hsenid.DBConnector; 
import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

public class Search extends HttpServlet { 
    private static final Logger logger = LogManager.getLogger(Search.class); 


    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

     resp.setContentType("application/json"); 
     PrintWriter out = resp.getWriter(); 
     PreparedStatement preparedStatement = null; 
     ResultSet resultSet = null; 
     String username = req.getParameter("searchword"); 
     DBConnector dbpool = (DBConnector) getServletContext().getAttribute("DBConnection"); 
     JsonArray jsonArray = new JsonArray(); 
     logger.info(username); 
     try { 
      Connection myConn = dbpool.getConn(); 
      String likeQuery = "Select * from userdetails WHERE username LIKE ?"; 
      preparedStatement = myConn.prepareStatement(likeQuery); 
      preparedStatement.setString(1, "%" + username + "%"); 
      resultSet = preparedStatement.executeQuery(); 

      while (resultSet.next()) { 
       JsonObject jsonObject = new JsonObject(); 
       jsonObject.addProperty("firstName", resultSet.getString("fname")); 
       jsonObject.addProperty("lastName", resultSet.getString("lname")); 
       jsonObject.addProperty("dob", resultSet.getString("dob")); 
       jsonObject.addProperty("country", resultSet.getString("country")); 
       jsonObject.addProperty("email", resultSet.getString("email")); 
       jsonObject.addProperty("mobile", resultSet.getString("mnumber")); 
       jsonObject.addProperty("username", resultSet.getString("username")); 

       jsonArray.add(jsonObject); 

      } 
      logger.info("JSON ARRAY Created"); 

      logger.info(jsonArray.toString()); 
      resp.getWriter().write(jsonArray.toString()); 
      out.println(jsonArray); 
     } catch (SQLException e) { 
      logger.error(e.getMessage()); 
     } 

    } 
} 
+1

Siehe den Fehler in der Browserkonsole und teilen Sie uns dies mit. Zum Öffnen der Konsole in Firefox 'STRG + UMSCHALT + J' –

+0

Danke Ataur. In diesem Moment hatte ich keine Ahnung, wie ich deine Frage beantworten sollte, und dann habe ich von Feuerwanzen erfahren. Frage gelöst :) –

+1

Prost. @Menuka Ishan :) –

Antwort

1

Sie schreiben das Ergebnis JSON-Array zweimal, so dass der Inhalt keine gültige JSON-Antwort ist, und JQuery nicht in der Lage sein, es zu analysieren:

resp.getWriter().write(jsonArray.toString()); 
out.println(jsonArray); // out is resp.getWriter() 

So einfach die zweite Zeile entfernen.

Um solche Fehler besser zu diagnostizieren, sollten Sie auch einen error Callback zu Ihrem $.ajax Aufruf hinzufügen und die Entwicklerkonsole anzeigen, wenn Fehler angezeigt werden.

+0

Danke :) Das hat funktioniert. –