Servlet n'envoie pas les données à AJAX ( output.write() )
JeuneEtudiante
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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
pour la servlet :
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); } } }
A voir également:
- Servlet n'envoie pas les données à AJAX ( output.write() )
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Trier des données excel - Guide
- Les données fournies dans le fichier a telecharger - Forum Excel
- Sauvegarde des données - Guide
1 réponse
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
De plus tu ne devrais pas faire
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
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