IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

jQuery, ajax avec méthode POST n'envoie aucun paramètre uniquement sous Firefox


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut jQuery, ajax avec méthode POST n'envoie aucun paramètre uniquement sous Firefox
    Bonjour,

    J'ai un problème assez étrange avec jQuery 1.3.2, c'est même le monde à l'envers car tout fonctionne avec IE mais pas avec Firefox.

    Le problème:
    Je vais donc vous expliquer le problème que j'ai avec FF.
    • Toutes requêtes Ajax avec la méthode POST n'envoie pas de paramètres.
    • Alors qu'avec la méthode GET tout fonctionne.



    Le contexte:
    Pour vous situer le contexte, le serveur web utilise:
    • EAServer 4.2
    • Les servlets + JSP (ici mon protocole de test se limite aux servlets)
    • jQuery 1.3.2 (testé aussi avec la nightly build 1.3.3 et la 1.2.6 sans succès)


    Le navigateur web: Firefox 3.5 finale ou 3.0.11 (même comportement)


    Le code:

    Voici mon protocole de test:
    Tout d'abord le servlet me servant de test.
    Le servlet retourne tout simplement le code html suivant ' <h1>test :</h1>PARAM ' où PARAM est le paramètre de nom 'test' envoyé indifférement en post ou en get.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public class TestServlet extends HttpServlet {
     
        /* doGet appel doPost */
        public void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
    	doPost(req,res);
        }
     
        public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
    	/*je récupère le parametre 'test'*/
    	String paramTest = req.getParameter("test");
     
    	/* Je vais envoyé un document html */
    	res.setContentType("text/html");
    	PrintWriter out = res.getWriter();
    	/* Je retourne le contenu de <paramTest>*/
    	out.println("<h1>test :</h1>" + paramTest);
        }
    }
    Ensuite ma page web me servant de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <html>
    <head>
    <title>
    	Test du javascript
    </title>
    <script type="text/javascript" language="Javascript" src="jquery.js"></script>
    <script language="JavaScript">
    function requeteAjax(){
    	  $.ajax({
    		type: "POST", 		//avec GET ça fonctionne sans PB
    		url: "/WIZ/test",	//C'est l'url pour executer ma servlet
    		data: "test=fonctionne",	//les paramètres sont correctements saisies car ça fonctionne en GET
    		dataType: "html",	//J'attend un document html en réponse à ma requete Ajax
    		success: function(doc) {
    			$('body').html(doc);	//Je remplace le body de la page avec le résultat de la requete
    		}
    	});
    }
    </script>
    </head>
    <body>
     
    <!-- Appel de la requête ajax qui me pose un PB uniquement sous firefox et uniquement avec la méthode POST -->
    <input type="button" value="Envoie de données avec ajax  en post" onclick="javascript:requeteAjax();"/>
     
    </body>
    </html>
    Avec firefox et la méthode POST je me retrouve avec la page suivante:

    test :
    null


    Alors qu'avec IE ou firefox avec la méthode GET je me retrouve avec la page suivante:

    test :
    fonctionne


    Mes tests:
    J'ai tout simplement vérifié que ma servlet n'était pas en cause en réalisant un simple formulaire envoyé en POST.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <html>
    <head>
    <title>
    	Test du javascript
    </title>
    </head>
    <body>
    <!-- Un formulaire envoyé en post qui fonctionne parfaitement, pour vour prouver que la méthode POST fonctionne bien dans mon servlet -->
    <form name="formulaireDeTest" action="/WIZ/test" method="post">
    	<input type="hidden" name="test" value="fonctionne"/>
    	<input type="submit" value="Envoie de données sans ajax en post"/>
    </form>
    </body>
    </html>
    Les données sont bien envoyé à ma servlet et j'obtiens bien la page

    test :
    fonctionne


    Les conclusions:
    • La servlet semble ne pas être en cause
    • La syntaxe de l'appel jQuery semble correct car ça fonctionne sous IE
    • Pourquoi uniquement la méthode POST ne transmet pas les paramètres et ce uniquement sous FF ?
    • Et pourquoi juste le passage de paramètres merde ?



    Je ne sais pas quoi faire, et je ne vois pas d'où viens le problème.
    Merci de votre aide par avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    regarde au niveaui de jquery si tu as bine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    de plus post doit etre en minuscules

    et le form avoir un name ... id ne suffit pas
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Merci de ta réponse rapide SpaceFrog.

    Oui, il y est par défaut de toute manière.
    Et j'ai même testé de le forcer dans mon appel à la fonction $.ajax mais sans succès.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $.ajax({
    		type: "POST", 
    		url: "/WIZ/test",
    		data: "test=fonctionne",
    		dataType: "html",
     
    		//paramètre par défaut que j'ai forcé, mais aucun changement ...
    		contentType: "application/x-www-form-urlencoded", 
     
    		success: function(doc) {
    			$('body').html(doc);
    		}
    	});
    Mon formulaire n'est pas en cause, il est juste là pour vous montrer qu'en utilisant un formulaire avec la méthode 'post' ça fonctionne, alors que ma requête ajax avec la méthode 'post' elle ne fonctionne pas sous FF.
    C'est juste une preuve que ma servlet n'est pas en cause - tout du moins c'est l'impression que ça me donne -.

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Salut,
    Citation Envoyé par SpaceFrog
    de plus post doit etre en minuscules

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    en effet andry.aime, la documentation officielle de jQuery préconise de mettre le type en majuscule, j'ai essayé en majuscule et minuscule et ça n'a rien changé.

    D'ailleurs, même l'appel suivant me pose exactement le même problème sous FF:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $.post(	"/WIZ/test", 
    	"test=fonctionne",
    	function(doc) {
    		$('body').html(doc);
    	},
    	"html");

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    et le name ???
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    J'ai rajouté le name au formulaire histoire de présenter un code HTML correct aux visiteurs, mais mon formulaire n'est pas utilisé lors des rêquetes Ajax.
    Je vais un peu mieux expliquer ça dans mon premier post ça évitera la confusion.

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $.post("/WIZ/test", 
    	{test:"fonctionne"},
    	function(doc) {
    		$('body').html(doc);
    	},
    	"html");
    Tu peux nous dire l'erreur retourner?

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Merci de vos réponses rapides.

    J'ai déjà essayé la notation avec une map : {test:"fonctionne"} et j'ai le même comportement.

    Ma page m'affiche après la requête

    test :
    null


    au lieu de

    test :
    fonctionne


    Donc, mon paramètre n'est toujours pas transmis.

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    idem pour {"test":"fonctionne"}, à noter que toutes les syntaxes que vous m'avez demandé de tester sont syntaxiquement correctes, qu'elles fonctionnent sous IE, mais pas sous mon FF.

    Je n'ai jamais eu de messages d'erreur sous FF, c'est tout simplement le paramètre qui n'est pas transmis.

    Pour faire avancer la chose, sous Firebug, je peux bien voir que le paramètre à était transmis en POST. je vais vous faire un screenshot

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    a tout hasard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataType:  "application/x-www-form-urlencoded",
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  13. #13
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Je viens d'essayer au cas où mais sa ne fonctionne pas.
    dataType permet de préciser à jQuery quel type de données il doit attendre de la réponse du serveur web.

    dataType

    The type of data that you're expecting back from the server. If none is specified, jQuery will intelligently pass either responseXML or responseText to your success callback, based on the MIME type of the response. The available types (and the result passed as the first argument to your success callback) are:

    * "xml": Returns a XML document that can be processed via jQuery.
    * "html": Returns HTML as plain text; included script tags are evaluated when inserted in the DOM.
    * "script": Evaluates the response as JavaScript and returns it as plain text. Disables caching unless option "cache" is used. Note: This will turn POSTs into GETs for remote-domain requests.
    * "json": Evaluates the response as JSON and returns a JavaScript Object.
    * "jsonp": Loads in a JSON block using JSONP. Will add an extra "?callback=?" to the end of your URL to specify the callback. (Added in jQuery 1.2)
    * "text": A plain text string.
    J'attends bien du HTML, donc ce paramètre est semble-t-il correcte.

  14. #14
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    voici les prises d'écran de firebug qui laisse suggérer que la requête est bien envoyée


    Onglet en-têtes:

    Est-ce que c'est du au faite que les données sont envoyés en UTF8 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    application/x-www-form-urlencoded; charset=UTF-8
    Onglet post:

    On voit bien mon paramètre de nom 'test' ayant pour valeur 'fonctionne'


    Onglet réponse:

    On voit bien que la servlet n'a pas pu lire le paramètre et que du coup, elle met null.

  15. #15
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    avec un autre mot que test ? peut être reconnu pas js ffx comme etant du js ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  16. #16
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    J'ai essayé avec un autre nom de variable et ça ne change rien.
    Parcontre je viens de mettre le doigt sur un truc intéressant

    Avec la méthode POST le charset semble forcé en UTF-8 car on peu lire ceci dans firebug
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ContentType: application/x-www-form-urlencoded; charset=UTF-8
    Je vais essayer de le forcer en ISO-8859-1 lors de l'appel ajax grâce au paramètre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",

  17. #17
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Dans le JSP:
    String paramTest = req.getParameter("test");
    .......
    out.println("<h1>test :</h1>" + paramTest);
    et dans le retour AJAX:
    <h1>test :</h1>null
    Je pense que le serveur ne reçoit pas le variable posté mais le variable est bien envoyé:
    Post
    test fonctionne

  18. #18
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Tout semble suggérer ça andry.aime.

    Je n'ai pas réussi à changer le charset. Mais bon, généralement quand c'est un pb de charset c'est juste des caractères qui sont mal interprétés et le problème est souvent du côté du navigateur web lors de l'affichage, et non du côté serveur.

    sinon j'ai essayé de mettre le charset de mon EAServer en UTF8 et ça ne change rien.

    Le problème semble donc ne pas venir du charset.

  19. #19
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Chose amusante, si je rajoute le paramètre suivant à l'appel de $.ajax ça ne fonctionne plus du tout, même plus sous IE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contentType: "application/x-www-form-urlencoded;",

  20. #20
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Je viens de faire un petit test sous Lunascape5 qui est un browser internet surlequel on peut choisir le moteur de rendu.

    Avec Gecko le moteur de FF ça ne fonctionne pas, avec Trident le moteur d'IE ou WebKit ça fonctionne.

    Ca ne me laisse qu'encore plus perplexe tout ça.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. jquery ajax avec mvc
    Par mvc_dev dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 28/04/2011, 10h06
  2. WebService REST avec méthode POST
    Par tetsu no tama dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 18/04/2011, 16h19
  3. [PHP 5.1] Redirection avec méthode POST
    Par richard_sraing dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2010, 18h10
  4. [JQuery] ajax avec Firefox
    Par elvan49 dans le forum jQuery
    Réponses: 2
    Dernier message: 17/12/2007, 12h21
  5. Réponses: 3
    Dernier message: 07/03/2005, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo