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

jQuery Discussion :

Retour d'une fonction ajax


Sujet :

jQuery

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut Retour d'une fonction ajax
    Bonjour à tous et à toutes,

    Je viens vous demander de l'aide ! J'utilise un appel ajax en jquery pour effectuer une requête en lui passant des paramètres en PHP.
    Seulement, j'ai un problème avec le retour de mon ajax. Dans ma fonction PHP, je lance une requête et créer un tableau contenant les valeurs que j'ai récupéré. Tout cela se passe très bien puisque mon tableau est bien rempli avec les bonnes valeurs (J'ai testé mon tableau avec un var_dump dans mon php).

    Cependant, dans la fonction success de mon appel ajax, ma donnée contenant mon tableau est null et je comprends vraiment pas pourquoi...(Il ne passe pas par le retour error)
    On m'a dis d'utiliser Json mais sans résultat non plus...

    Je vous mets le code source :
    calendrier.js :
    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
    var mois_request = document.getElementById("mois_envoyee").value;
    var annee_request = document.getElementById("annee_envoyee").value;
    var jour_request = document.getElementById("jour_envoyee").value;
    $.ajax({
    	url: 'cible_ajax.php',
    	dataType: 'json',
    	type: 'POST',
    	data: { annee: annee_request, mois: mois_request, jour: jour_request},
    	success: function(data){
    		alert("Data saved : " + data);
    	},
    	error: function(xhr, status, error) {
      		alert(xhr.responseText);
    	}
    });
    });
    cible_ajax.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
    18
    19
    20
    21
    22
    <?php 
    header('Content-type: application/json');
    $link = mysqli_connect("localhost", "root", "", "cloud diabetic");
    /* Vérification de la connexion */
    if (mysqli_connect_errno()) {
    	printf("Échec de la connexion : %s\n", mysqli_connect_error());
    	exit();
    }
    if($_POST['mois'] < 9){
    	$_POST['mois'] = '0'.$_POST['mois'];
    }
    if($_POST['jour'] < 9){
    	$_POST['jour'] = '0'.$_POST['jour'];
    }
    $date = $_POST['annee']."-".$_POST['mois']."-".$_POST['jour'];
    $query = "SELECT id, horaire FROM enregistrement WHERE date='" . $date . "'";
    $result = mysqli_query($link, $query) or die(mysqli_error($link));
    $r = array();
    while ($row = mysqli_fetch_assoc($result)){
    	$r[] = $row;
    }
    return json_encode($r);

    J'espère avoir été assez clair dans mon explication...
    En vous remerciant pour vos futurs réponses.

  2. #2
    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
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    return json_encode($r);
    C'est bien joli de faire un return, mais tu renvoies le résultat à quoi au juste ?
    Tu ne penses pas qu'un echo serait plus utile ?
    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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Tout d'abord merci pour ta réponse !

    Désole, je débute seulement sur ce sujet.
    Pour moi, le return renvoyait à ma fonction ajax mon tableau dans la valeur data mais apparemment ce n'est pas le cas...

    Du coup j'ai fais ça mais dans mon alert il m'affiche Object object, Object object (normal j'ai 2 lignes dans mon tableau) mais comment je peux les traiter après ?
    Sachant que je veux mettre le contenu de mon tableau dans une div, il vaut mieux que je traite mes données de mon tableaux dans le php ou dans le script ? Vu qu'après j'aurai juste à l'introduire avec un innerHTML().

    Merci pour ta réponse et si tu connais un tuto qui explique bien je suis preneur car sur le net j'ai pas trouvé grand chose...

  4. #4
    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
    essaye ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    success: function(data){
    		console.log( data);
    	},
    et regarde dans ta console
    tu comprendras que data est un json ...
    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 !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Pour que le navigateur, à qui est destiné la réponse, n'affiche plus [Object object], il faut lui faire comprendre que vous lui avez envoyé du JSON et donc typer la réponse avec quelque chose comme :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Content-Type: application/json');
    echo json_encode($r);

  6. #6
    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
    Le return ne peut pas marcher car sinon, ça voudrait dire que PHP et JavaScript parlent le même langage. Ton code PHP ne possède aucune fonction, donc aucun return ne fera quoi que ce soit.
    Les meilleurs cours et tutoriels pour apprendre l'AJAX.
    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

  7. #7
    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
    @chanyslas.

    Rien à voir. Dans la requête, il a indiqué qu'il attendait comme réponse un objet JSON, du coup, jQuery parse la réponse pour renvoyer un objet JSON au callback.
    Et comme un alert() n'est pas capable d'afficher le contenu d'un objet, il affiche [Object object] (enfin, ça dépend du navigateur).
    D'où la proposition de Spaffy d'utiliser console.log() qui permet d'afficher le contenu dans la console.
    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

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    D'accord merci à tous pour vos réponses !

    Mais au départ, j'avais utilisé une fonction comme ceci :

    cible_ajax.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $fonction = $_POST['fonction'];
    unset($_POST['fonction']);
    $fonction($_POST);
    function getEvents($args){
    	header('Content-type: application/json');
    	$link = mysqli_connect("localhost", "root", "", "cloud diabetic");
    	/* Vérification de la connexion */
    	if (mysqli_connect_errno()) {
    		printf("Échec de la connexion : %s\n", mysqli_connect_error());
    		exit();
    	}
    	if($_POST['mois'] < 9){
    		$_POST['mois'] = '0'.$_POST['mois'];
    	}
    	if($_POST['jour'] < 9){
    		$_POST['jour'] = '0'.$_POST['jour'];
    	}
    	$date = $_POST['annee']."-".$_POST['mois']."-".$_POST['jour'];
    	$query = "SELECT id, horaire FROM enregistrement WHERE date='" . $date . "'";
    	$result = mysqli_query($link, $query) or die(mysqli_error($link));
    	$r = array();
    	while ($row = mysqli_fetch_assoc($result)){
    		$r[] = $row;
    	}
    	echo json_encode($r);
    }

    avec le javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    		$.ajax({
    			url: 'cible_ajax.php',
    			dataType: 'json',
    			type: 'POST',
    			data: { fonction : getEvents, annee: annee_request, mois: mois_request, jour: jour_request},
    			success: function(data){
    				alert("Data saved : " + data);
    			},
    			error: function(xhr, status, error) {
      				alert(xhr.responseText);
    			}
    		});
    Voilà pourquoi j'avais utilisé un return dans mon fichier php.
    Donc maintenant j'ai juste quelques questions afin d'avoir bien compris comment faire.

    Déjà cette manière que je viens de poster dans ce message est-elle propre ? L'intêret étant d'éviter de créer un fichier ajax pour chacun de mes appels.
    Et si cela est correct et propre, dois-je utiliser un return ou un echo à la fin du coup vu que c'est une fonction ?

    Merci d'avance !

  9. #9
    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
    Heu non... c'est vraiment pas terrible comme façon de faire...
    Déjà, $fonction ne correspond pas à une fonction, ce serait plutôt ${$function}, mais même, ce serait très dangereux comme technique, à moins que des paramètres POST du style fonction=system&args=format ne te fassent pas plus peur que ça !
    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

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    Du coup je créer une page à chaque appel ajax ? On peut pas faire autrement ?

    Autre question, le traitement de mon tableau, il vaut mieux que je le gère dans le PHP et je renvoi directement un string contenant le html entier que je mettrais dans ma balise ou plutôt dans le javascript ?

    Merci de vos réponses !

  11. #11
    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
    En quoi est-ce gênant d'avoir une page par type d'appel ?
    Au contraire, ça permet d'avoir un code mieux organisé et plus facile à maintenir.

    Pour le traitement, j'en sais rien, ça dépend de plein de choses que je ne connais pas.
    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

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Novembre 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 68
    Points : 28
    Points
    28
    Par défaut
    D'accord merci pour toutes vos réponses ! Sujet résolu encore merci !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. retour d'une fonction ajax
    Par cyril.D dans le forum jQuery
    Réponses: 6
    Dernier message: 31/03/2011, 10h49
  2. [XML][XSLT][debutant]retour d'une fonction
    Par maxvador dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 30/03/2006, 14h12
  3. recuperer en php le retour d'une fonction plsql
    Par gismoblue dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/03/2006, 16h39
  4. PL/SQL retour d'une fonction
    Par aaronw dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/12/2005, 13h25
  5. [Oracle 9.1] Types de retour d'une fonction PL/SQL
    Par ftrifiro dans le forum PL/SQL
    Réponses: 8
    Dernier message: 12/10/2005, 16h54

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