PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 10-07-2011 18:07:23

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

[Résolu] Objet XHR ne répond pas

Saluton,
Je patauge dans ce petit script pourtant anodin

function getXMLHttpRequest() {
  var xhr = null;
 
  if (window.XMLHttpRequest || window.ActiveXObject) {
    if (window.ActiveXObject) {
      try {
        xhr = new ActiveXObject("Msxml2.XMLHTTP");
      } catch(e) {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      }
    } else {
      xhr = new XMLHttpRequest();
    }
  } else {
    alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
    return null;
  }
 
  return xhr;
}
     
function choisirexercice(etab){
    var oXHR=getXMLHttpRequest();
    var etab =document.forms[0].etab.options[document.forms[0].etab.selectedIndex].value;
    alert(etab);
    oXHR.onReadystatechange = function(){
        if (oXHR.readyState == 4 && (oXHR.status == 200 || oXHR.status == 0)) {
            alert("OK");
            document.getElementById("ajax1").innerHTML=oXHR.responseText;
            document.getElementById("ajax1").style.display="block";
            }
        else{alert("attendre");}
        }
    data="etab="+etab;
    oXHR.open("POST", "exetab.php", true);
    oXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    oXHR.send(data);
    }
 

Qui est déclenché par l'événement onchange d'un <select>.
Le code php appelé est vraiment très bateau

<?php
header("Content-Type: text/plain");
require_once "etabs.inc.php";
$etab=$_POST['etab'];
$infosEtab=$etabs[$etab];
require_once "pdo.inc.php";
$sql = "SELECT DISTINCT EXERCICE FROM JOURNAUX";
$options="\n".'<select id="exercice" onchange="affichebalance()";>'."\n";
$options.='<option selected="selected">Choisir un exercice</option>';
foreach($dbh->query($sql) as $Exercice){
    $options.="\n<option>{$Exercice['EXCERCICE']}</option>";
    }
$options.="\n</select>\n";
echo $options;

Ce qui est bizarre, c'est que j'obtiens bien la boîte alert de la ligne 14 du javascript, mais c'est tout.
Pas d'alert des lignes 28 ou 32.
On dirait que oXHR.onReadystatechange = function() n'est jamais exécuté.
Et aucun message dans la console d'erreur javascript.

Pierrot, kéktenpense ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#2 10-07-2011 19:23:18

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 624
Site Web

Re : [Résolu] Objet XHR ne répond pas

Bonsoir MK,

Oui c'est normal.
En fait ta fonction chosirexercice(etab) doit contenir le code suivant


// ....
oxhr.onreadystatechange=choisirexercice_statechanged;
oxhr.open("GET",url,true);
oxhr.send(null);
 

en général à la fin de ta fonction mais ca dépends hein
Ensuite tu dois créer la fonction pour gérer ton statechanged comme suit


function choisirexercice_statechanged(){
    if (oxhr.readyState==4){
       // ..... ton code ...
     } else {
         // un truc du genre ou une gif animée d'attente
         document.getElementById("statutbar").innerHTML="Recherche  en cours. Veuillez patientez...";
     }
}
 

Et ça suffit. le oxhr de ta fonction d'état sera reconnue par javascript, aucune raison de s'en inquiéter.

++

Dernière modification par Jc (10-07-2011 19:23:43)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 10-07-2011 19:25:56

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

Salut Jc et merci de ta réponse,

Et pourquoi pas open en mode POST ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 10-07-2011 19:29:48

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 624
Site Web

Re : [Résolu] Objet XHR ne répond pas

Oui c'est comme tu veux et selon tes besoins wink


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 10-07-2011 19:40:59

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

Bon, j'ai essayé avec ta méthode, même constat.
La définition dynamique de la méthode de traitement avec function() est pourtant assez courante.
Elle offre en outre l'intérêt de permettre l'utilisation d'une fonction de callback.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 10-07-2011 19:41:31

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

Je viens même d'essayer avec la méthode GET, rien à faire.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 10-07-2011 19:59:32

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 624
Site Web

Re : [Résolu] Objet XHR ne répond pas

Ca marche très bien pourtant, tu as du faire une erreur quelque part.
Pense à vérifier la casse car par exemple oXHR <> oxhr
Vérifie que ton xhr n'est pas null une fois appelé avec un alert, ca peut aidé au debuggage aussi.

Dernière modification par Jc (10-07-2011 20:01:46)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#8 10-07-2011 20:03:52

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 624
Site Web

Re : [Résolu] Objet XHR ne répond pas

Je viens de vérifier ta fonction httprequest. Elle n'est pas bonne non plus. Pas besoin d'y mettre des if...else, tes try..catchs sont là pour ça.


function GetXmlHttpObject(){
  var req = false;
  try {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    req = new XMLHttpRequest();
  } catch (err) {
    try {
      // certaines versions de IE
      req = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (err) {
      try {
        // Autres versions de IE
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (err) {
        req = false;
      }
      return req;
    }
    return req;
  }
  return req;
}
 

Un truc du genre devrait suffire et fonctionner à 100%


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#9 10-07-2011 20:09:04

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 191

Re : [Résolu] Objet XHR ne répond pas

y a des sauces toutes faites les mecs big_smile
a++

Hors ligne

#10 10-07-2011 20:13:12

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 624
Site Web

Re : [Résolu] Objet XHR ne répond pas

Ca fait plaisir de voir que l'on a rendu notre ami Pierrot Joyeux big_smile
comme quoi il en faut peu pour ... wink

Dernière modification par Jc (10-07-2011 20:13:36)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#11 10-07-2011 20:15:25

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

j'ai maintenant

function getXMLHttpRequest() {
      var req = false;
      try {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        req = new XMLHttpRequest();
        }
      catch (err) {
        try {
              // certaines versions de IE
              req = new ActiveXObject("Msxml2.XMLHTTP");
             }
        catch (err) {
          try {
                // Autres versions de IE
                req = new ActiveXObject("Microsoft.XMLHTTP");
                }
          catch (err) {
                req = false;
                }
          return req;
          }
        return req;
        }
      return req;
      }

function choisirexercice_statechanged(){
    if (oxhr.readyState==4){
            document.getElementById("ajax1").innerHTML=oXHR.responseText;
            document.getElementById("ajax1").style.display="block";
        }
   else {
         // un truc du genre ou une gif animée d'attente
         alert("attendre");
        }
    }

   
function choisirexercice(etab){
    var oXHR=getXMLHttpRequest();
    var etab =document.forms[0].etab.options[document.forms[0].etab.selectedIndex].value;
    oXHR.onReadystatechange = choisirexercice_statechanged;
    data="etab="+etab;
    oXHR.open("GET","exetab.php?"+data, true);
    oXHR.send(null);
    }
 

Et toujours pas de changement.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 10-07-2011 20:20:14

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

L'intérêt immédiat de la méthode GET c'est qu'elle m'a permis de tester le code PHP avec

http://localhost/brizeux/visucomptes/EXETAB.PHP?etab=0290069t

et j'obtiens bien ce que je veux

<select id="exercice" onchange="affichebalance();">
<option selected="selected">Choisir un exercice</option>
<option>2010</option>
</select>

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#13 10-07-2011 20:23:26

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 624
Site Web

Re : [Résolu] Objet XHR ne répond pas

Re,

Tu as une URL en majuscules et ton appel en minuscules..
Rajoutes après ta ligne var oxhr=...
if (xhr==null){alert ("Votre navigateur ne supporte pas les requêtes HTTP ou javascript a été désactivé.");return;}
fait un alert(etab) pour debug et dit ce que ca donne.

PS: un var data=     aiderait beaucoup aussi^^

Dernière modification par Jc (10-07-2011 20:25:32)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#14 10-07-2011 20:35:50

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

Jc a écrit :

Tu as une URL en majuscules et ton appel en minuscules..

Ouais j'ai vu ça pourtant le script est bien nommé en minuscules sur le serveur Wamp.

Jc a écrit :

Rajoutes après ta ligne var oxhr=...
if (xhr==null){alert ("Votre navigateur ne supporte pas les requêtes HTTP ou javascript a été désactivé.");return;}
fait un alert(etab) pour debug et dit ce que ca donne.

Ça donne bien la valeur attendue à savoir

0290069T

Jc a écrit :

PS: un var data=     aiderait beaucoup aussi^^

Bien vu, mais ça ne change rien


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#15 10-07-2011 20:42:37

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 624
Site Web

Re : [Résolu] Objet XHR ne répond pas

Si tu travailles sous wamp, supprime ta ligne de changement de style pour voir.
Sur ton innerHTML= tu utilises oXHR au lieu de oxhr...

Après, j'ai plus d'idées... sauf peut être de changer d'ordi lol

Dernière modification par Jc (10-07-2011 20:44:13)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#16 10-07-2011 20:51:50

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

Jc a écrit :

Si tu travailles sous wamp, supprime ta ligne de changement de style pour voir.

Fait, sans changement

Jc a écrit :

Sur ton innerHTML= tu utilises oXHR au lieu de oxhr...

Bien vu (ah le copier-coller !) mais sans changement

Jc a écrit :

Après, j'ai plus d'idées... sauf peut être de changer d'ordi lol

Je crois que non, là tout de suite, en tout cas.
Le plus bizarre c'est que ne voulant pas trop me prendre la tête à replonger dans AJAX, j'ai carrément tout pompé des tutos du Site du Zéro qui fonctionnent très bien (je les ai testés en local).
Je vais continuer à chercher.
Merci Jc.
@+


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#17 10-07-2011 21:07:06

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 624
Site Web

Re : [Résolu] Objet XHR ne répond pas

Encore un truc, sur ta fonction statechanged, tu utilises partout oxhr alors que tu as défini oXHR dans ta fonction d'appel..
Après promis plus d'idées, et de rien pour le coup de main.

Dernière modification par Jc (10-07-2011 21:07:44)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#18 10-07-2011 21:12:03

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

Non, non

function getXMLHttpRequest() {
      var req = false;
      try {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        req = new XMLHttpRequest();
        }
      catch (err) {
        try {
              // certaines versions de IE
              req = new ActiveXObject("Msxml2.XMLHTTP");
             }
        catch (err) {
          try {
                // Autres versions de IE
                req = new ActiveXObject("Microsoft.XMLHTTP");
                }
          catch (err) {
                req = false;
                }
          return req;
          }
        return req;
        }
      return req;
      }

function choisirexercice_statechanged(){
    if (oXHR.readyState==4){
            document.getElementById("ajax1").innerHTML=oXHR.responseText;
           // document.getElementById("ajax1").style.display="block";
        }
   else {
         // un truc du genre ou une gif animée d'attente
         alert("attendre");
        }
    }

   
function choisirexercice(etab){
    var oXHR=getXMLHttpRequest();
    var etab =document.forms[0].etab.options[document.forms[0].etab.selectedIndex].value;
    oXHR.onReadystatechange = choisirexercice_statechanged;
    var data="etab="+etab;
    oXHR.open("GET","exetab.php?"+data, true);
    oXHR.send(null);
    }


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#19 10-07-2011 21:16:03

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 191

Re : [Résolu] Objet XHR ne répond pas

la casse mk, la casse wink

onReadystatechange   -> onreadystatechange

a++

ps : je me marre ptdr.gif, je me marre

Hors ligne

#20 11-07-2011 07:43:46

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

Ouais, mais la normalisation javascript c'est quand même du grand n'importe quoi :

oXHR.readyState==4

mais

oXHR.onreadystatechange = choisirexercice_statechanged;

Elle est où la logique ?
Ceci dit, ça ne résoud en rien le problème.
Et ce qui me surprend le plus, c'est que la console d'erreur ne moufte pas sur ces problèmes de syntaxe pointilleuse.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#21 11-07-2011 08:34:33

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 191

Re : [Résolu] Objet XHR ne répond pas


xhr.onreadystatechange = function(){
       // instructions de traitement de la réponse
};    
               
if (xhr.readyState == 4) { // Reçu, OK    } else { // Attendre... }    
 

a++

Hors ligne

#22 11-07-2011 12:00:49

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

Ce qui est bien la syntaxe que j'avais employée de prime abord et qui, avec la correction du problème de casse qui t'a tant fait rire, mon Pierrot, me donne, enfin, le résultat escompté.
Merci qui ? Merci son Pierrot !
Merci aussi à Jc qui s'est donné tant de mal pour secourir un vieillard dans la panade.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#23 11-07-2011 12:37:41

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 191

Re : [Résolu] Objet XHR ne répond pas

ce qui importe, c'est que tu sois arrivé à tes fins wink
a++

Hors ligne

#24 11-07-2011 15:11:46

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 624
Site Web

Re : [Résolu] Objet XHR ne répond pas

Bonjour,

Si tu es sur Firefox, utilises FireBug et sous IE, outils de développement. Tu auras toutes les erreurs Js qui remonteront.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#25 11-07-2011 15:37:43

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Objet XHR ne répond pas

Plutôt sympatoche ce Firebug, en effet.
Merci encore les ch'tits gars, j'vas essayer de faire progresser mon bouzin dès ce soir


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums