Retourne JSON à partir du servlet
C'est un très basique de demande de test de réponse. Navigateur envoie "bonjour à partir du navigateur" à la servlet à l'aide de jQuery $.API ajax, et servlet reçoit ce message, puis créer un objet JSON à l'aide de org.json.simple bibliothèque et renvoie au navigateur une réponse JSON avec le message "hello from server".
Je suis en cours d'exécution ce sur localhost et il suffit de supposer que mon adresse IP est 123.123.12.123, la plate-forme Ubuntu, serveur Tomcat 6.0, s'exécutant dans l'environnement de développement Eclipse.
Test 1. Je démarre le serveur à partir d'Eclipse, ouvrez Firefox, entrez http://localhost:8080/myproject/test.jspje peux voir servlet reçoit le message et le navigateur reçoit la réponse, test réussi.
Test 2. le serveur est toujours en cours d'exécution lors de l'Éclipse à Ubuntu, je démarre Windows 7 ordinateur invité de VirtualBox et le navigateur Firefox sous Windows 7, entrez http://123.123.12.123:8080/myproject/test.jspfonctionne comme je m'y attendais, test réussi.
Test 3. le serveur est toujours en cours à Eclipse sur Ubuntu, ouvrez Internet Explorer 9 le navigateur, lui donner l'adresse de http://123.123.12.123:8080/myproject/test.jsprien ne se passe.
Le debug me donne
Réponse HTTP/1.1 200 OK
Le corps de la réponse {"message":"bonjour du serveur"}
Le test.jsp est
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insérer le titre ici</title> </head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js" type="text/javascript"></script> <script type="text/javascript" src="release/js/libs/json2.js"></script> <script> $(document).ready(function(){ var request = ({"message": "Bonjour à partir du navigateur'}); var jsonobj=JSON.stringify(demande); $.ajax({ données: {para:jsonobj}, dataType: 'json', url: './TestServlet', type: 'POST', success: function(jsonObj){ alert(jsonObj.message); }, error: function() { alert('Ajax readyState: '+xhr.readyState+'\nstatus: '+xhr.+ '' + err); } }); }); </script> <body> </body> </html>
Le code de la servlet est
importer java.io.IOException; importer 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.simple.JSONObject; import org.json.simple.JSONValue; /** * Servlet mise en œuvre de la classe TestServlet */ public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public TestServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //TODO Auto-généré méthode stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { demande.setCharacterEncoding("utf8"); réponse.setCharacterEncoding("utf8"); réponse.setContentType("application/json"); PrintWriter out = response.getWriter(); JSONObject jsonObj = (JSONObject) JSONValue.parse(la demande.getParameter("para")); Système..println(jsonObj.get("message")); JSONObject obj = new JSONObject(); obj.put("message", "bonjour du serveur"); .print(obj); } }
Mise à jour:
Après un examen plus approfondi par le changement
error: function() { alert('Ajax readyState: '+xhr.readyState+'\nstatus: '+xhr.+ '' + err); }
à
error: function(xhr,err) { alert('Ajax readyState: '+xhr.readyState+'\nstatus: '+xhr.+ '' + err); }
J'ai eu d'alerte readyState:0 statut:0.
Mais je peux voir {"message":"bonjour du serveur"}, au corps de la Réponse et
l'en-tête de réponse est
Valeur De La Clé De Réponse HTTP/1.1 200 OK
source d'informationauteur user200340
Vous devez vous connecter pour publier un commentaire.
IE caches des requêtes AJAX de façon agressive (plus de Firefox, Chrome et Safari, de toute façon).
Parfois, vous avez besoin pour définir l'en-tête de cache de contrôleur lors de la demande. Comme
cache:false
. J'ai essayé de corriger votre code comme ceciJ'ai changé le contenu de la réponse-type de
application/json; charset=utf8
justeapplication/json
et que travaillé.J'ai eu le même problème. Il fonctionne bien sur Firefox mais pas sur IE...
J'ai trouvé la lecture de ce post que mon problème était lié à la "Content-Type". Le problème semble que que IE a problème avec les "charset=UTF8'. Toutefois, si vous utilisez la "charset=UTF-8" (avec un tiret), il est ensuite de travailler!
Votre Type de Contenu devrait alors être: application/json;charset=UTF-8