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 :

Envoyer le résultat d'un tableau avec $.ajax vers un script PHP (JSON, $.ajax et PHP)


Sujet :

jQuery

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Envoyer le résultat d'un tableau avec $.ajax vers un script PHP (JSON, $.ajax et PHP)
    Bonjour à Tous,

    j'ai réalisé un formulaire pour lequel toutes les réponses sont stockées dans une variable tableau "myArray".

    J'aimerais maintenant envoyer ces réponses pour qu'elles soient stockées dans la base de données de mon serveur mais j'éprouve quelques difficultés.

    Je m'y suis certainement mal pris.

    La première chose que j'ai faite a été de "séréaliser" les données de mon tableau avec JSON:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var answers = JSON.stringify(myArray);

    ensuite, j'envoie le tout vers mon script PHP de la manière suivante en jquery:

    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
    39
    40
    41
     
    $.ajax({
     
           				url : "add.php", 
           				type : "POST", 
           				dataType: "json",
                                    data: answers,
    		                success : function(response) {
     
     
                               	$('#next').hide();
                                $('#previous').hide();
    							$('.page17').hide();
                                if ('success' in response) {
                                    $('.completed-message').text('Merci de votre participation à cette enquête!<br><br>'+response['success']);
     
                                }
                                else if ('error' in response) {
                                    $('.completed-message').text('Une erreur est survenue: '+response['error']);
    								$('#next').hide();
                               	 	$('#previous').hide();
    								$('.page17').hide();
     
                                }
                                else {
                                    $('.completed-message').text('Une erreur inconnue est survenue.');
    								$('#next').hide();
                                	$('#previous').hide();
    								$('.page17').hide();
     
                                }
                            },
                            error: function(xhr, status, error) {
                                $('#next').hide();
                                $('#previous').hide();
    							$('.page17').hide();
                                $('.completed-message').text('Une erreur est survenue: envoi impossible des données au serveur'+ error['error']);
     
     
                            }
        			});

    mon code PHP est le suivant (et je pense que mon erreur se trouve ici):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(isset($_POST['answers']))       $answers= json_decode($_POST['answers']);
    else      $answers="aucune donnée n'a été reçue";
    Le reste du code PHP fonctionne bien puisque dans ma table "aucune donnée n'a été reçue" s'inscrit bien.

    par contre, côté navigateur, je reçois l'erreur "Une erreur est survenue: envoi impossible des données au serveur undefined" qui correspond au cas de figure de ma fonction $.ajax

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    error: function(xhr, status, error) {
                                $('#next').hide();
                                $('#previous').hide();
    							$('.page17').hide();
                                $('.completed-message').text('Une erreur est survenue: envoi impossible des données au serveur'+ error['error']);
     
     
                            }
    Est-ce que quelqu'un aurait une idée de là où ça pourrait coincer?
    Est-ce que c'est bien un $answers= json_decode($_POST['answers']); que je dois écrire côté PHP pour récupérer mes réponses?

    Merci d'avance pour votre aide!

  2. #2
    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 640
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var answers = JSON.stringify(myArray);
    y'a quoi dans myArray ?

    passe juste un json sans le stringifier ...

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    la variable "myArray" contient toutes les réponses aux questionnaires (juste des caractères).

    Si je passe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var answers = JSON(myArray);
    Ca ne marche pas

    mais là n'est pas le problème, le résultat de "var answers = JSON.stringify(myArray);" est OK.

    Le souci c'est que je n'arrive pas à le transmettre avec $.ajax. Ca doit coincer à un moment avec le PHP

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 436
    Points : 4 930
    Points
    4 930
    Par défaut
    bonjour,
    ton fichier php n'est pas bien formé, quand on parle json, il faut que le php nous envois un array, puis on l'encode avec json_encode(array)
    voilà un petit exemple d'ajax-php :
    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
    39
    40
     
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>getAnswers</title>
    <script   src="https://code.jquery.com/jquery-3.1.1.min.js"   integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="   crossorigin="anonymous"></script>
    <script>
    $(function(){
    				$("#envoie").click(function(){
    					$.ajax({
     
    						url : "getAnswers.php", 
    						type : "POST", 
    						dataType: "json",
    						data: $("#myform").serializeArray(),
    						success : function(response) { 
    							if(response.answer1 && response.answer2){
    								alert("answer 1"+response.answer1+" answer 2:"+response.answer2);
    							}
    							else if(response.erreur){
    								alert("une erreur s'est produite :"+response.erreur);
    							}
    						},
    						error:function(e){alert("erreur ajax "+e.responseText);}
     
    						});
    				});
    	});
    </script>
    </head>
     
    <body>
    	<form id="myform" method="post" >
        	<input name='answer1' type='text'/>
            <input name='answer2' type='text'/>
            <button id="envoie">Envoyer</button>
        </form>
    </body>
    </html>
    getAnswers.php :
    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
     
    <?php
    $response=array();
    if(!empty($_POST) && !empty($_POST["answer1"]) && !empty($_POST["answer2"]) ){
    $ins1=$_POST["answer1"];
    $ins2=$_POST["answer2"];
    $response=array('answer1'=>$ins1
                                    ,'answer2'=>$ins2);
    }
    else
    {
    $response=array('erreur'=>'pas de données envoyées');
    }
    echo json_encode($response);
    ?>

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci de ta réponse Toufik.

    Très honnêtement, cette commande JSON est trop compliquée pour moi. Comme je suis un peu pris par le temps (ca fait des jours que je me bats avec ça), je m'y suis pris complétement autrement et ça a l'air de fonctionner.

    J'ai revu mon $.ajax de la sorte (je passe les 82 réponses contenues dans ma varaibale tableau MyArray comme ceci):

    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
    $.ajax({
            url : 'add.php', 
            type : 'POST', 
            data: { q1: myArray[1], q2: myArray[2], q3: myArray[3], q4: myArray[4], q5: myArray[5], q6: myArray[6], q7: myArray[7], q8: myArray[8], q9: myArray[9], q10: myArray[10], q11: myArray[11], q12: myArray[12], q13: myArray[13], q14: myArray[14], q15: myArray[15], q16: myArray[16], q17: myArray[17], q18: myArray[18], q19: myArray[19], q20: myArray[20], q21: myArray[21], q22: myArray[22], q23: myArray[23], q24: myArray[24], q25: myArray[25], q26: myArray[26], q27: myArray[27], q28: myArray[28], q29: myArray[29], q30: myArray[30], q31: myArray[31], q32: myArray[32], q33: myArray[33], q34: myArray[34], q35: myArray[35], q36: myArray[36], q37: myArray[37], q38: myArray[38], q39: myArray[39], q40: myArray[40], q41: myArray[41], q42: myArray[42], q43: myArray[43], q44: myArray[44], q45: myArray[45], q46: myArray[46], q47: myArray[47], q48: myArray[48], q49: myArray[49], q50: myArray[50], q51: myArray[51], q52: myArray[52], q53: myArray[53], q54: myArray[54], q55: myArray[55], q56: myArray[56], q57: myArray[57], q58: myArray[58], q59: myArray[59], q60: myArray[60], q61: myArray[61], q62: myArray[62], q63: myArray[63], q64: myArray[64], q65: myArray[65], q66: myArray[66], q67: myArray[67], q68: myArray[68], q69: myArray[69], q70: myArray[70], q71: myArray[71], q72: myArray[72], q73: myArray[73], q74: myArray[74], q75: myArray[75], q76: myArray[76], q77: myArray[77], q78: myArray[78], q79: myArray[79], q80: myArray[80], q81: myArray[81], q82: myArray[82] },
            success : function(response) {
                    $('#next').hide();
                    $('#previous').hide();
                    $('.page17').hide();
                    $('.completed-message').text('Merci de votre participation à cette enquête!');
            },
            error: function(xhr, status, error) {
                    $('#next').hide();
                    $('#previous').hide();
                    $('.page17').hide();
                    $('.completed-message').text('Une erreur est survenue: envoi impossible des données au serveur');
            }
    });
    Côté PHP, j'ai récupéré chaque variable du tableau avec des $q1=$_POST['q1'],....


    C'est pas la méthode la plus propre mais je n'avais plus la possibilité de trop passer de temps avec ça.

    Merci pour votre aide!

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 679
    Points
    44 679
    Par défaut
    Bonjour,
    C'est pas la méthode la plus propre...
    c'est le moins que l'on puisse dire, tu aurais peut être eu meilleur compte d'utiliser des name de la forme reponse[] pour récupérer/traiter cela coté serveur dans une boucle, un truc dans le style :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      // utilisation dans une boucle
      foreach( $_POST['reponse'] as $value ) {
        echo $value;
      }

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

Discussions similaires

  1. Création d'une carte réseau en temps réel (Javascript/php/Json/AJax)
    Par hermally dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 31/03/2015, 11h28
  2. [Dojo] Filtrer les résultats d'un tableau avec FilteringSelect
    Par VinceCBA dans le forum Bibliothèques & Frameworks
    Réponses: 7
    Dernier message: 27/10/2011, 14h06
  3. Réponses: 1
    Dernier message: 15/12/2009, 21h27
  4. renvoyer le résultat d'un tableau avec prétraitement
    Par mumuri dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 18/09/2008, 23h28

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