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 :

Requête simple en Ajax [AJAX]


Sujet :

jQuery

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Requête simple en Ajax
    Bonjour, j'ai importé une BDD dans Wampserver et j'ai crée un fichier php pour y faire une requête.
    Lorsque j'exécute la requête en tapant le lien dans la barre d'adresse du navigateur, elle fonctionne correctement.

    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
    27
    28
    29
    30
    31
    32
    <?php
     
    header('Content-Type: application/json; charset=utf-8');
     
    	try{
    	  include('config.php');
    	  include('pdo2.php');
    	  $pdo = PDO2::getInstance();
    	  $etatsmat=0;
    	  $pdo->exec("SET CHARACTER SET utf8");
     
    	  $requete_prepare_1=$pdo->prepare("SELECT monText FROM articlebdd WHERE Id = '31'"); 
     
    	  $requete_prepare_1->execute();
    	  $json= array();
     
    	  while($lignes=$requete_prepare_1->fetch(PDO::FETCH_OBJ))
    		{			
    		    $json[]=array(
    			'monText'=>$lignes->monText,
    			);
    		}
     
    	$requete_prepare_1->closeCursor();
    	$json['success']=true;
     
    	echo json_encode($json);
     
    	}catch(PDOException $e) {
    	     echo 'Error:'.$e->getMessage();
    	}	  
    ?>

    Je voudrais donc récupérer le résultat de ma requête par le biais d'une fonction ajax.
    Mais j'y arrive pas en tapant le code ci-dessous, j'obtiens "NO DATA PRESENT".
    Pourriez-vous me dire ce qui ne va pas, svp?
    Merci beaucoup par avance.
    Arsène




    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
    function maFonction() {
     
            $.ajax({
                url: http://localhost/DosTxt/requestMonTexte.php,
                type: 'get',
                dataType: 'json',
     
                success: function(data1) {
     
                            if(data1 == "SUCCESS"){
                           	      alert(data1);
                               }
                           else{
                                  alert("NO DATA PRESENT");
                               }
     
                    },
     
                    error: function (responseData) {
     
                        alert("ERROR");
            }
     
                });
     
            };

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    quand tu écris dataType: 'json', cela signifie que tu reçois en retour des données au format JSON, donc data1 == "SUCCESS" n'a aucun sens !

    Mets un console.log( data1) dans ta fonction « success » et regarde ce que tu récupères.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Bonjour,

    j'ai donc utilisé la console et lorsque je lance la requête, la fenêtre alert() renvoie "ERROR" (Dans mon appli c'est "NO DATA PRESENT")

    La console indique ceci :

    Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost/DosTxt/requestMonTexte.php. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 408
    Points : 4 848
    Points
    4 848
    Par défaut
    pour savoir l'erreur dans le callback error de $.ajax, utilise 'reponseText' =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error:function(responseData){alert('ERROR :'+responseData.responseText);}
    puis au niveau php, tu commet une erreur de syntaxe dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $json[]=array(
    	'monText'=>$lignes->monText,// il faut enlever cette dernière virgule.
    );
    puis tu as déjà déclaré la variable $json en tant que array : $json= array(), pas la peine de le refaire $json[]=array(...);
    $json['monText']=$lignes->monText est suffisant.

    il y a le header aussi que tu dois enlever, ajax s'en occupera..., l'essentiel c'est que tu as mis dataType:'json' dans les paramètres de ajax.

    ensuite pour la récupération de data1 qui est dans le callback success d'ajax, tu peux mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    success:function(data1){console.log(JSON.stringify(data1));}
    pour voir le résultat 'data1' dans la console, sous forme string .

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Merci beaucoup, j'ai l'impression que la solution n'est pas loin.

    J'ai donc désactivé dans le code php la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //header('Content-type: application/json');
    et j'ai rajouté le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Access-Control-Allow-Origin: *');
    Avec ça j'ai réglé le problème Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

    J'ai éliminé ensuite la dernière virgule en trop que j'avais mise après $lignes->monText

    Mais je n'arrive toujours pas à récupérer les données.

    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    success:function(data1){console(JSON.stringify(data1));},
    me donne comme erreur : TypeError: console is not a function


    J'ai aussi désactivé le code ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    						/*
                            if(data1 == "SUCCESS"){
                          // alert(data1);
                               }
                           else{
                                 alert("NO DATA PRESENT");
                               }*/

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 408
    Points : 4 848
    Points
    4 848
    Par défaut
    ce n'est pas console() mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log(JSON.stringify(data1))

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Avec console.log(data1) j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {}
    0: Object { monText: "blablabla" }
    success: true
    __proto__: Object {}
    RequeteAjax.js:28:7
    Object { 0: {}, success: true }
    RequeteAjax.js:28:7
    Avec console.log(JSON.stringify(data1)) j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"0":{"monTexte":"blablabla"},"success":true}
    et si je rajoute de suite après alert(data1) j'obtiens en message alert : [object Object]

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 408
    Points : 4 848
    Points
    4 848
    Par défaut
    cela veux dire que la requête ajax a été bien lancée et bien reçue, maintenant dans la fonction success tu peux faire tout ce que tu veux avec data1.
    rappelle toi que tu reçois les données en json, ce qui veux dire que si tu veux récupérer tes variables dans le callback success, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ,success:function(data1){
    if(data1.monText && data1.success){
         alert("monText :"+data1.monText+", success :"+data1.success);
    }
    });

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    J'y suis presque, ça m'indique data1.monText is undefined.

    Avec une autre formule j'arrive à afficher le texte. Mais je ne veux pas utiliser each().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     success: function(data1) {
     
                        $.each(data1, function (index, record) {
                         //   if ($.isNumeric(index)) { 
     
                                var chaine = record.monTexte;
    							//alert(chaine);
     
                            $('#myVerset').text(chaine);
     
    						//	},
     
    					});

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 408
    Points : 4 848
    Points
    4 848
    Par défaut
    et data1[0].monTexte, ça donne quoi ?

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Avec data1[0].monTexte, ça marche! Je vous remercie beaucoup pour cette aide précieuse .

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour Arsène,

    avant d'aller plus loin, il serait bon de COMPRENDRE et d'optimiser ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	  $requete_prepare_1=$pdo->prepare("SELECT monText FROM articlebdd WHERE Id = '31'");
    Là, tu cherches UNE SEULE LIGNE : celle comportant l'id "31".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	  while($lignes=$requete_prepare_1->fetch(PDO::FETCH_OBJ))
    il est INUTILE de faire un while, puisque le résultat ne comporte qu'UNE SEULE LIGNE !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	 		    $json[]=array(
    			'monText'=>$lignes->monText,
    			);
    Par conséquent, INUTILE de construire un array pour 'monText', alors que tu ne récupères qu'UNE SEULE VALEUR.

    Ce qui donne :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $lignes=$requete_prepare_1->fetch(PDO::FETCH_OBJ);
    $json['monText'] = $lignes->monText;
     
    $requete_prepare_1->closeCursor();
    $json['success'] = true;
     
    echo json_encode($json);

    ENFIN, dans le script :
    Code jQuery : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                success: function(data1) {
     
                            if( data1.success ){ // équivalent à : if( data1.success == true ){
                           	      $('#myVerset').text( data1.monText );
                               }
                           else{
                                  alert("NO DATA PRESENT");
                               }
     
                    },

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Merci bien pour toutes ces précisions. Je vais modifier mon code. Et j'utiliserai while lorsque je me servirai de each() plus tard, dans une autre requête.

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

Discussions similaires

  1. [AJAX] Ajax - requête simple
    Par Liebgott dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/05/2008, 13h49
  2. pb avec requête simple :(
    Par jiojioforever dans le forum Langage SQL
    Réponses: 13
    Dernier message: 29/01/2007, 10h33
  3. Réponses: 11
    Dernier message: 13/07/2006, 16h15
  4. Réponses: 2
    Dernier message: 23/06/2006, 14h16
  5. [DEBUTANT] TSqlQuery & requête simple
    Par fred64 dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/04/2004, 11h35

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