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 :

[AJAX] Undefined index et AJAX


Sujet :

AJAX

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2013
    Messages : 4
    Points : 5
    Points
    5
    Par défaut [AJAX] Undefined index et AJAX
    Bonsoir,

    Alors le problème est simple à comprendre :

    - Une requête AJAX qui envoie dans ma page de traitement une donnée générée dynamiquement dans une balise cachée (hidden). Cette variable est bien initialisé et contient bien la valeur que je cherche à traiter.

    - Une fois dans la page de traitement elle a disparu et ma variable $_POST['index'] dont l'index est identique à celui de ma requête AJAX n'est plus assignée et je me retrouve donc avec un "index undefined". Pour le coup ma requête SQL ne s'exécute pas correctement (?) quoique je face le retour de ma requête AJAX me renvoie sans cesse un résultat vide.

    Pour y voir plus clair :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function getNumberLevel() {
    	var plateauId = document.getElementById('id_P');
    	alert(plateauId.value);
    	var xhr = getXMLHttpRequest();
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    			alert(xhr.responseText);
    			return xhr.responseText;
    		}
    	};
    	xhr.open("POST","Recup_NumberLevel.php",true);
    	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    	alert("id_P="+plateauId.value);
    	xhr.send("id_P="+plateauId.value);
    }

    Le alert dans mon callback ne renvoie rien et le return renvoie un foutu "undefined". Les autres montrent bien que ma valeur "plateauId.value" a été récupérée.

    Ma page de traitement Recup_NumberLevel.php :

    Code php : 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
    <?php
    try {
    	$bdd = new PDO('mysql:host=localhost;dbname=Antibio_Quizz', 'root', 'vegeta26', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    }
    catch (Exception $e) {
    	die('Erreur : ' . $e->getMessage());
    }
    $req = $bdd->query('SET NAMES UTF8');
    $id = $_POST['id_P'];
    $req = $bdd->prepare("SELECT COUNT(*) AS nb FROM niveaux WHERE id_plateau = :id") or die(print_r($bdd->errorInfo()));
    		$req->execute(array(
    		'id' => $id
    		));
    $res = $req->fetch();
    echo $res['nb'];
    $req->closeCursor();
    ?>

    C'est rien de bien sorcier et pourtant...

    Si vous avez des pistes ou voyez des erreurs (stupides forcément) que je n'aurai pas détecté....

    (Si je le poste dans la partie PHP c'est surtout que j'imagine que le problème vient bel et bien de là, car jusqu'à l'envoie à ma page de traitement, tout se déroule bien du coté JS. )

    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Points : 217
    Points
    217
    Par défaut
    Bonjour ,

    premièrement je ne comprends pourquoi tu utilise l'objet XMLHTTPRequest , avec des bibliothèque comme jQuery c'est plus facile et cross-platform , car la création d'un objet XMLHTTPRequest est différente d'un navigateur à l'autre .

    l'erreur 'undefined' veut dire que l'objet xhr n'est pas crée , donc l'attribut responseText n'est pas reconnue.


    ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var xhr = getXMLHttpRequest();
    le XMLHTTPRequest est une solution crée par microsoft , voici le liens la doc officielle : http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx .
    l'instanciation d'objet xhr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var xhr = new XMLHttpRequest();
    .
    mais je te recommande d'utiliser une bibliothèque comme jQuery.
    exemple d'un requete ajax donc ton cas )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function envoyer(){
    var id = $('#id_p').value();
    var d = "id_p="+id;
    $.ajax({
    type: "POST",
    url:"Recup_NumberLevel.php",
    data: d,
    success:function(r){
    // r contient le resulat de ton script PHP
    }
    });
    }
    en plus c'est cross-platfom

  3. #3
    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
    Bonjour,

    @CyberD: Tu ne peux pas faire un return dans une fonction callback d'une requête AJAX en mode asynchrone. Soit tu travailles en mode synchrone, soit tu fais directement le traitement dans le callback. Tu peux nous montrer aussi la fonction getXMLHttpRequest() ?
    @van-bom: Utiliser jQuery que pour lancer une requête AJAX est un peu abusif.

    A+.

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par van-bom
    je ne comprends pourquoi tu utilise l'objet XMLHTTPRequest
    Probablement parce que c'est ce qui semble le plus naturel pour initier une requête AJAX...

    Citation Envoyé par van-bom
    avec des bibliothèque comme jQuery c'est plus facile et cross-platform
    Pas nécessairement. D'une part, ça oblige à apprendre et connaitre les méthodes de la bibliothèque et comme le dit Andry, si c'est juste pour initier une requête, le gain est loin d'être suffisant. D'ailleurs, en regardant le code que tu donnes par la suite, on passe de 14 à 12 lignes pour le script ; en comptant tout le code jQuery à exécuter pour la requête, il n'y a pas photo.

    Citation Envoyé par van-bom
    la création d'un objet XMLHTTPRequest est différente d'un navigateur à l'autre
    De nos jours, IE6 ne peut plus être considéré comme un navigateur courant, or c'est le seul navigateur pour lequel la création de l'objet XMLHttpRequest est spécifique. C'est d'ailleurs ce que tu montres quelques lignes plus loin.

    Citation Envoyé par van-bom
    l'erreur 'undefined' veut dire que l'objet xhr n'est pas crée
    Ca dépend où se situe cette erreur. Et dans les explications de CyberD, il est loin d'être flagrant que c'est à la création de l'objet xhr...

    @ CyberD : il faudrait nous donner plus de détails sur l'exécution de ton script, notamment pour savoir à quel moment tu perds ton paramètre.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Slt,

    Pourrions nous avoir le résultat de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert("id_P="+plateauId.value);
    et juste comme ça

    ma variable $_POST['index']
    pourquoi parles tu de cette variable, confusion (je pense mais cas ou)??

    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/03/2017, 12h46
  2. [AJAX] Google index mon contenu Ajax ?
    Par tryan dans le forum AJAX
    Réponses: 0
    Dernier message: 12/12/2013, 13h49
  3. [AJAX] Ajax "undefined" sous Firefox
    Par mess is lore dans le forum AJAX
    Réponses: 5
    Dernier message: 04/08/2010, 18h52
  4. SYS is undefined Asp.net AJAX Extensions
    Par infostars dans le forum ASP.NET
    Réponses: 10
    Dernier message: 30/04/2009, 16h15
  5. [AJAX] z-index et et . IE
    Par yann.morineau dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/02/2009, 09h35

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