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

AJAX Discussion :

Requête Ajax ne fonctionne pas sous Firefox


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    maçon
    Inscrit en
    Novembre 2004
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : maçon

    Informations forums :
    Inscription : Novembre 2004
    Messages : 292
    Par défaut Requête Ajax ne fonctionne pas sous Firefox
    Bonjour,
    Lorsque je fais une requête ajax , celle-ci ne fonctionne pas sous Firefox 67.0.4 (W7 64 bits) .
    En revanche cela marche très bien sous Chrome,IE,Edge,Brave,Seamonkey,Opera .
    En fait sous Firefox le code ne boucle pas sur le changement d'état .
    Le changement d'etat affiche 1 , puis le code sort .
    Y a t-il un paramètre à activer dans Firefox ??
    D'avance merci de votre aide

    Voici le code AJAX si ça peut éclairer ??
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    function f_initAjax(){
    	var vHttp;
    	if (window.XMLHttpRequest) {
    		vHttp = new XMLHttpRequest();
    	} else {
    		//Pour IE 5 et 6
    		//alert('!!!');
    		vHttp= new ActiveXObject("Microsoft.XMLHTTP");
    	}
     
    	return vHttp; 
    }
    //-------------
     
    function f_ExecuteReqAjax(v0fic,v0data) {
    	var vReponse = '';	
    	var vHttp = new f_initAjax();
    	var vPointProgress = ".";
    	vHttp.onreadystatechange = function() {
    	 if (vHttp.readyState === 4 ){
    		alert('ReadyState === 4');
    		 if (vHttp.status === 200) {
    		document.getElementById("I_AffMessages").innerHTML = vParam ;
    	 } 
    	}else{
    		alert('pb requete ' + vHttp.readyState + '**-**' + vHttp.status);
    	}
    	};
    	vHttp.open('POST', v0fic, true);
    	vHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    	vHttp.send(v0data);
    }
     
    function f_CreaAgence(v0fic,v0data){
     f_ExecuteReqAjax(v0fic,v0data); 
    }
    Le code PHP qui fait un insert
    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
    29
    30
    31
     
    <?php
     
    echo '$_POST :' ;
    print_r($_POST).'<br/>';
    include('Gest_Cnx_BD.php');
    unset($O_sql1);
     
            try {
                    $O_sql1=new C_Cnx('sqlite:./bd/BD_Vehicules.db');
     
                    if (isset($_POST['z_cdag'])){
                            $cdeag=$_POST['z_cdag'];
                            $nomag=$_POST['z_nomag'];
                            $adr1=$_POST['z_adr1ag'];
                            $adr2=$_POST['z_adr2ag'];
                            $cp=$_POST['z_cpag'];
                            $ville=$_POST['z_villeag'];
     
                    }
                    $sql = 'INSERT INTO T_agences(codeag,libelag,lgadresse1,lgadresse2,codepostal,ville)';
                    $sql = $sql." VALUES (:cdeag,:nomag,:adr1,:adr2,:cp,:ville)";
                    $tbu=array($cdeag,$nomag,$adr1,$adr2,$cp,$ville);
                    $O_sql1->fc_requete($sql,$tbu);
            }
            catch( PDOException $exception )
            {
                    echo '<br/> Erreur : ';
                    die($exception->getMessage());
                    }
    ?>

  2. #2
    Inactif  
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2019
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2019
    Messages : 202
    Par défaut
    Ton echo au début ça te retourne un résultat non ?

  3. #3
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    c'est normal, ta requête Ajax est plutôt mal écrite (et je ne parles pas de l'indentation ou du [non] style)
    au moins sur cette ligne : var vHttp = new f_initAjax(); .

    qui devrait simplement être : var vHttp = f_initAjax(); .

    ensuite, pour document.getElementById("I_AffMessages").innerHTML = vParam; .
    => on se demande par quel miracle une variable inexistante peut renvoyer une valeur (vParam) ?

    le reste j'ai pas regardé, mais j'ai des gros doutes pour la suite

  4. #4
    Membre éclairé
    Profil pro
    maçon
    Inscrit en
    Novembre 2004
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : maçon

    Informations forums :
    Inscription : Novembre 2004
    Messages : 292
    Par défaut
    psychadelic c'est quoi l'intérêt d'être cassant ???

    Pour les autres qui souhaitent vraiment m'aider , j'ai oublié de préciser que la requête fonctionne en mode synchrone , et fonctionne aussi en mode asynchrone quand le mode débogage est activé .

    Pour xXxNeWgEnErAtIoN , j'avais mis une trace que j'ai oublié d'enlever quand j'ai collé le code , oui le echo renvoyait quelque chose .

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 227
    Par défaut
    Bonjour,
    tu te compliques un peu la vie avec ton code d'une autre époque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var oXhr = new XMLHttpRequest();
    est largement suffisant !

    Prend l'habitude d'utiliser console.log() en lieu et place de tes alert().

    Dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("I_AffMessages").innerHTML = vParam;
    où récupères tu vParam, il semble manquer quelque chose ?

    Il n'est peut être pas nécessaire de faire une fonction qui appelle une fonction avec les mêmes paramètres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function f_CreaAgence(v0fic, v0data) {
      f_ExecuteReqAjax(v0fic, v0data);
    }

  6. #6
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    En attendant j'aimerai bien olaxius nous explique l'intérêt d'avoir mis dans son code : var vHttp = new ( new XMLHttpRequest() ); .

  7. #7
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 102
    Par défaut
    @olaxius : Il y a une phrase qu’on entend parfois, you ain’t gonna need it, abrégé YAGNI, et qui signifie « tu n’auras pas besoin de ça ». C’est une phrase qu’on nous dit quand on fait du code trop compliqué. En l’occurence, comme Psychadelic et NoSmoking l’ont fait remarquer, il y a des couches de fonctions qui semblent inutiles et qui rendent le code plus difficile à comprendre.

    En ce qui concerne f_CreaAgence, peut-être que tu prévois d’y ajouter du code par la suite donc je ne vais pas y toucher. Pour le reste, je propose le code suivant pour repartir sur des bases plus simples :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    "use strict"; // voir https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Strict_mode
     
    function f_initAjax() {
      return new XMLHttpRequest();
    }
     
    //-------------
     
    function f_ExecuteReqAjax(v0fic, v0data) {
      const vHttp = f_initAjax(); // j’ai retiré new
      let vReponse = "";
      let vPointProgress = ".";
     
      vHttp.onload = function () {
        console.log("ReadyState === 4 (load)");
        if (200 === vHttp.status) {
          // grâce au mode strict, cette ligne lèvera une erreur car vParam n’est pas défini
          document.getElementById("I_AffMessages").innerHTML = vParam;
     
          // ... faire quelque chose avec vHttp.responseText
        }
        else {
          console.log(`pb requete ${vHttp.readyState}**-**${vHttp.status}`);
        }
      };
     
      vHttp.onerror = function () {
        console.log("Le serveur n’a pas pu être atteint");
      };
     
      vHttp.open("POST", v0fic, true);
      vHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      vHttp.send(v0data);
    }
     
    function f_CreaAgence(v0fic, v0data) {
     f_ExecuteReqAjax(v0fic, v0data);
    }
    En ce qui concerne le problème de Firefox, tu n’as pas donné le code status mais je devine que c’est 0. Dans 9 cas sur 10, quand il y a une différence de comportement d’ajax d’un navigateur à l’autre, c’est un problème de permission. Peux-tu nous dire :
    • Quel protocole tu utilises (notamment, est-ce que tu es en file:) ?
    • Si les URL de la page et de la requête ajax ont des origines différentes ?





    @psychadelic : sur une note technique,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new ( new XMLHttpRequest() )
    n’est pas équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new ( function () { return new XMLHttpRequest(); } )
    Le premier cas ne marche pas car l’objet créé entre les parenthèses ne peut pas être utilisé comme un constructeur. Dans le second cas, ça marche « par accident » car l’instruction return écrase l’instance qui aurait dû être normalement renvoyée en tant que this.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. [AJAX] ajax et xml ne fonctionnant pas sous Firefox
    Par Phpdebut dans le forum AJAX
    Réponses: 7
    Dernier message: 03/02/2010, 13h15
  2. [AJAX] Ne fonctionne pas sous Firefox
    Par rafikos2 dans le forum AJAX
    Réponses: 2
    Dernier message: 28/01/2010, 11h36
  3. fonction ridicule qui fonctionne pas sous firefox
    Par Isses dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/06/2006, 13h08
  4. Evenement OnClick qui ne fonctionne pas sous firefox
    Par frechy dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/12/2005, 17h06
  5. Java ne fonctionne pas sous Firefox
    Par Info-Rital dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 30/07/2004, 00h37

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