JeuWeb - Crée ton jeu par navigateur
[Résolu][Ajax] Réponse de la page de traitement NULL - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu][Ajax] Réponse de la page de traitement NULL (/showthread.php?tid=731)



[Résolu][Ajax] Réponse de la page de traitement NULL - Byleth - 15-03-2008

Bonjour, ça faisait longtemps et je reviens avec beaucoup de cheveux en moins à cause d'un problème Ajax :
lorsque je lance ma fonction sur ma page html, je créé un objet xmlhttp puis j'ouvre une page de traitement en PHP et je récupère la réponse dans une variable mais là elle est complètement vide....

Voici le script qui se trouve dans la première page :
Code :
<script language="Javascript">
function afficherRecettes(){
    var xhr;
        xhr = creerObjetXMLHTTP();
    
    if(!xhr){ alert("Votre navigateur ne supporte pas les requetes HTTP.");}
    
    else {
     var url="ajax/traitementphp/afficherRecettes.php";
    
        // fait la demande au serveur
        xhr.open("GET",url,true);
    
    xhr.onreadystatechange = function(){
            // si le traitement est complet        
        if(xhr.readyState == 4) {
            if(xhr.status == 200){
                var xmlReponse = xhr.responseXML;
                xmldocumentElement = xmlReponse.documentElement;
                message = xmldocumentElement.firstChild.data;
            
            alert(xmlReponse);    // Erreur ici
            }
        }
        }
        xhr.send(null);
    }
}

</script>

ça devrait rendre un message alert avec du texte qui vient de la page afficherRecettes.php :

Code PHP :
<?php
session_start
();

header('Content-Type: text/html; charset=ISO-8859-1');
echo
'
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>'
;
include
"../../bibliotheque.php";
connection();

$query='SELECT c.Nom, ca.Nb_Points FROM competences c INNER JOIN competences_acquises ca ON ca.Id_Competence=c.Id WHERE ca.Id_joueur='.$_SESSION['Id'];

$requete=mysql_query($query) or die(mysql_error());

$i=0;
while (
$rep=mysql_fetch_assoc($requete)){

$tabCompetences[$i]['nom']=$rep['Nom'];
$tabCompetences[$i]['points']=$rep['Nb_Points'];
$i++;

}

$resul='<table><tbody>
'
;

$nb_comp=count($tabCompetences);

for (
$i=0,$j=0;$i<$nb_comp ;$i++,$j++){

$num=$j%2;
$resul=$resul.'<tr class="fonce'.$num.'">
<td>'
.$tabCompetences[$i]['nom'].'</td><td>'.floor($tabCompetences[$i]['points']/10).'</td>
<td>'
.$tabCompetences[$i]['points'].'/'.((floor($tabCompetences[$i]['points']/10)+1)*10) .'</td>
</tr>'
;
}

$resul=$resul.'
</table></tbody>'
;

echo
'
<response>
'
.$resul.'
</response>'
;

?>

ça rend
Code :
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<response>
<table><tbody>
<tr class="fonce0">
            <td>Bagarre</td><td>1</td>
            <td>10/20</td>
            </tr>
</table></tbody>
</response>

Et le code pour creerObjetXMLHTTP :
Code :
function creerObjetXMLHTTP() {

    var xmlhttp = false;
        try {
            xmlhttp = new XMLHttpRequest();
        }
        catch(e)
        {
        //pour IE6 et plus ancien
            var XMLHTTPversions = new Array ('Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP');
        // toutes les versions pour IE
        
        // on les teste toutes
            for (var i=0; i<XMLHTTPversions.length && !xmlhttp; i++){    
                try {
                    xmlhttp = new ActiveXObject(XMLHTTPversions[i]);
                }
                catch (e) {} // ignore une erreur potentielle
            }
        }
        
    return xmlhttp;
}

Donc si quelqu'un a une idée je suis preneur :p


RE: [Ajax] Réponse de la page de traitement null - Loetheri - 15-03-2008

Vérifie ta variable $nb_comp
Puis vérifie simplement que ta boucle affiche/renvoie bien les $i et comme tu le souhaites.

Je ne compte pas débugger ton script. C'est à toi de le débugger. On peut te donner des outils et/ou des méthodes. Le problème me semble plutôt être du côté du PHP que de l'AJAX mais bon. As-tu essayé sans utiliser AJAX pour savoir si c'est bien AJAX qui pose problème ? -_-'
J'aurais également évité d'utiliser $j. Tu sais, sauf grosse erreur de ma part, éviter son utilisation.


RE: [Ajax] Réponse de la page de traitement null - Byleth - 15-03-2008

Si tu regardes mieux, j'ai mis que rendais ma page de traitement, donc à mon avis la problème ne vient pas de là car c'est une page XML à mon avis correct.

Je veux bien debugger moi même, j'y ai passé des heures déjà sur ce simple script donc je demande à des gens qui s'y connaissent vraiment Smile

Mon problème vient du fait que j'ai utilisé le script d' un livre et j'ai l'impression que ce script est tout moisi car j'ai déjà tout retransformé pratiquement sans m'y connaitre en JS. Je suis donc probablement passé à coté d'un truc tout bête mais que je ne suis pas capable de voir donc je vous demande votre aide à genoux Confused

PS : Loetheri, arrête de me prendre pour un teubé lol


RE: [Ajax] Réponse de la page de traitement null - Loetheri - 15-03-2008

Yop !

Excuse-moi ^^ J'ai été un peu vite dans ma réponse. Je me suis trompé :p Cela arrive à tout le monde, hein.
A priori, je ne vois pas de fautes du côté du code AJAX. Tu as essayé sans faire appel à ta page PHP pour tester que ton code d'appel à xHTTPRequest est bon ?


RE: [Ajax] Réponse de la page de traitement null - Byleth - 15-03-2008

A vrai dire tout va bien, jusqu'à ce que j'essaie de récuperer mon xml, je ne sais probablement pas bien l'extraire ou le coder car je viens de tester avec du bête HTML et ça passe impec (enfin en apparence).

Si j'ai bien compris le XML me permettra de classer mes réponses dans des "variables" (si j'ose dire) ce qui est beaucoup plus pratique donc du coup si quelqu'un s'y connait dans ce domaine je suis preneur.

T'inquiète pas Loetheri, tu es tout excusé, faut dire que venant de toi ça ne m'étonne pas lol.
Ensuite je sais bien que certains ne font aucun efforts pour débugger eux même, tu as du croire que c'était mon cas à cause de tout le code mais bon, j'avais pas le choix vu que je n'ai pas complètement identifié l'erreur....


RE: [Ajax] Réponse de la page de traitement null - Roworll - 15-03-2008

Code :
<table><tbody>
<tr class="fonce0">
            <td>Bagarre</td><td>1</td>
            <td>10/20</td>
            </tr>
</table></tbody>
Les tags ne sont pas fermé dans leur ordre d'ouverture.
Tu fermes le table avant le tbody. En XML, c'est le crash assuré mais en HTML, ça passe.


RE: [Ajax] Réponse de la page de traitement null - Byleth - 16-03-2008

Vraiment merci, j'étais tellement concentré à chercher mes erreurs dans le javascript que j'ai pas vu cette petite erreur de copié collé et comme l'affichage était correct sur ma page php je suis vraiment passé à coté....


Bon, je me doutais bien que c'était pas compliqué mais à ce poit...au moins je referai pas cette bêtise Smile

Merci encore :respect:


RE: [AJAX] Réponse de la page de traitement null - Byleth - 16-03-2008

Byleth a écrit :header('Content-Type: text/html; charset=ISO-8859-1');

Vous préferez que je me flagelle avec quel objet ? un truc qui pique ? qui fouette ? un homard ?


RE: [Résolu][AJAX] Réponse de la page de traitement null - Mysterarts - 16-03-2008

Un truc qui tranche...
Oui, c'est plus de la flagellation, mais bon, c'est ce que je préfère...

Mysterarts, qui file chercher le sel, parce que le sel dans les plaies, c'est bon