Servlet n'envoie pas les données à AJAX ( output.write() )

Fermé
JeuneEtudiante Messages postés 3 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 21 octobre 2017 - Modifié le 21 oct. 2017 à 15:43
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 21 oct. 2017 à 15:53
bonjour !!

Alors j'ai un problème avec la méthode output.write() qui est sencé envoyé les données de ma servlet, apparemment elle n'envoie pas du premier coup les données à Ajax ça ne marche qu'à partir de la deuxieme fois.
j'ai debugué avec ma console est ça me renvoie tjr Ajax readyState:0 au premier coup
voilà le code de mon fichier.js et de celui de ma servlet.java


$( document ).ready(function(){

 $("#userlogin").click(index.login);
});
var index = {

  onReady: function(e){
            e.preventDefault();
  },
  login: function(){
     console.log("im here");
   var email = $('#email').val();
   var password = $('#password').val();
    login(email,password);
  
   }}

   /**


* sends ajax to LoginServlet

* @param email

* @param password

*/
   // onclick="makeRequest(event)"
   function login(email,password){
   console.log("send to LoginServlet");
   $.ajax({
    type : "GET",
    url : encodeURI("Login"),
    data :{
     "email":email,
     "password":password,
    },
    dataType : "json",
    success : function(result) { 
    console.log("im in succes");
    var resultat=result;
    if (resultat.message=="1")   
    {
     var e = window.event || e;
     window.location=('Home.jsp');
     e.returnValue = false;
     return false;
    }
    
    },
    error: function(xhr,err) {
                  alert('Ajax readyState: '+xhr.readyState+'\nstatus: '+xhr.status + ' ' + err);
              }
   });
  }




pour la servlet :

package Servlets;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONObject;

import Beans.Cinephile;
import Services.LoginService;




/**


* Servlet permettant d'appeler la méthode auhentificateUser de la classe LoginService

* dans le but d'authentifier un utilisateur

*/
public class LoginServlet extends HttpServlet 
{

 private static final long serialVersionUID = 1L;

 public LoginServlet() {super();}
 
 
 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  
  doPost(request, response);
  System.out.println(" hei");}
 
 @Override
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException 
 {
  System.out.print("the response :"+response+"\n");

  try 
  { 
   PrintWriter out = new PrintWriter(response.getWriter());  
   BufferedWriter output = new BufferedWriter(out);
   response.setContentType("text/plain");
   String email = request.getParameter("email");
   System.out.println("email  "+email);
   String password = request.getParameter("password");
   System.out.println("password  "+ password);
   if (!email.equals("") && !password.equals(""))
   {
    LoginService loginService = new LoginService();
    JSONObject jo = loginService.authenticateUser(email, password);
     jo.get("message").toString();
    if (!me.equals("Invalid email or password")) 
    {
     Cinephile user = LoginService.getUserByUserEmail(email);
     System.out.println(user.getId());
     request.getSession().setAttribute("userId", Integer.toString(user.getId())); 

     }
    
    output.write(jo.toString());
    output.flush();
    output.close();
     
    
   }
   else 

   {
    response.getWriter().print("404 wrong URL");
   }

  }
  catch (Exception e) 
  {
   e.printStackTrace(); //local debug
   request.setAttribute("error", e); //remote debug
   response.getWriter().print(e);
  }
 }
}

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié le 21 oct. 2017 à 15:54
Bonjour,

Le code Java que tu nous montre ne doit pas être le bon vu qu'il ne compile pas...

Pour le reste, vu que tu fais de la gestion d'erreur côté jQuery avec
error: function(xhr,err)
, il faudrait mieux gérer les erreurs côté Java et renvoyer un statut d'erreur 404, et pas juste un message "404 wrong URL" (qui sera reçu avec un statut 200...)

De plus tu ne devrais pas faire
output.close();
ça va fermer le flux de la réponse, mais la servlet en a encore besoin (de manière générale, ne ferme jamais un flux que tu n'as pas ouvert toi même).

Quant au débogage il faudrait d'abord tester ton service Java directement avec ton navigateur web, et valider qu'il fonctionne, et seulement si c'est bon, déboguer le JavaScript.
Mais il faudrait d'abord savoir lequel des deux programmes est incorrect pour corriger le bon.

Remarque : un code jQuery ne devrait pas appeler directement une JSP comme Home.jsp, il faudrait faire une URL qui point vers cette page côté serveur, mais ça ne doit pas apparaître côté client.
La confiance n'exclut pas le contrôle
0