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 :

$.getJSON, récupération données hors de la fonction


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut $.getJSON, récupération données hors de la fonction
    Bonjour à tous et merci d'avance pour votre aide.

    L'idée ici est de gérer les messages d'erreurs des formulaires pour mes sites multilingues.
    J'ai donc pensé à stocker dans un fichier .json les différent message et que je récupére ainsi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $(document).ready(function($) {
     
            var getError_message = [];
     
    	$.getJSON('scripts/wizardFrame.json', function(data) {
    		getError_message = data;
    		console.log(getError_message.fr.emptyTxt); //fonctionne
    	});
     
    	console.log(getError_message.fr.emptyTxt); //ne fonctionne pas
    });
    Mon fichier .json
    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
    {
      "fr": {
        "emptyTxt": "Certains champs obligatoirs non pas été complété afin de soumettre cette requête.",
        "typeMail": "L'adresse courriel introduite est inccorecte.",
        "typePhone": "Numéro de téléphone",
        "typeAlpha": "mot commun"
      },
      "nl": {
        "emptyTxt": "Lorem ipsum Adipisicing in fugiat laboris cillum.",
        "typeMail": "Salut",
        "typePhone": "Numéro de téléphone",
        "typeAlpha": "mot commun"
      },
      "en": {
        "emptyTxt": "Lorem ipsum Dolor velit officia magna sint.",
        "typeMail": "Salut",
        "typePhone": "Numéro de téléphone",
        "typeAlpha": "mot commun"
      }
    }
    Hors je ne parviens pas à récupérer ma variable getError_message hors de la fonction $.getJSON.

    j'obtient:
    TypeError: getError_message.fr is undefined
    Aussi je voulais avoir votre avis sur la technique et la conception.
    Merci à vous,

  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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    c'est juste une question de chronologie ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $(document).ready(function($) {
     
            var getError_message ={};
     
    	$.getJSON('scripts/wizardFrame.json', function(data) {
    		getError_message = data;
    		alert('appuie sur le bouton');
    	});
     
    	$('#foo').click(function(){ console.log(getError_message.fr.emptyTxt); })
     
    });
    avec un bouton :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="button" id="foo" value="go" />


    Dans ton code précédent le console.log est lancé avant le callback du getJson
    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 !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Le problème est identique.
    Voici le code en résumé:


    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <script language="JavaScript" type="text/javascript" src="scripts/wizardFrame.js"></script>
    <script language="JavaScript" type="text/javascript" src="scripts/contact.js"></script>
    contact.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $(document).ready...
    	$('#btnSend').on('click', function(){
                    ...
    		empty_txt (arryEmpty) && typeMail (arryMail) && typeCheckbox(); 
             });
    });
    wizardFrame.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $(document).ready...
    	$.getJSON('scripts/wizardFrame.json', function(data) {
    		getError_message = data;
    	});
    });
     
    	function empty_txt (argument) {
                    ...
                    $('[class*=wizardFrame_] #form > #error p').text(getError_message.fr.empty);
            }
    Merci encore,

  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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    quand la fonction empty_txt est elle lancée ...
    visiblement avant le callback de ta fonction

    As tu testé avec un alert dans le callback qui t'avertit de la fin du getJson ??
    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
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $.getJSON('scripts/wizardFrame.json', function(data) {
    	getError_message = data;
    	alert('jsonchargé'); 
    	console.log(getError_message.fr.emptyTxt);;
    });
    Donc j'actualise la page, j'ai l'alert, je clique sur OK. Ensuite ma console affiche bien getError_message.fr.emptyTxt. Et quand je clique sur #btnSend, ma console affiche l'erreur
    ReferenceError: getError_message is not defined
    Je viens de mettre en ligne la page, si tu le souhaite voici:
    http://www.innovadesign.be/workspace...y/contact.html

    Merci encore,

  6. #6
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    En regardant dans la console de firebug tu as bien un objet JSON ...

    Ton souci provient de tes "boutons" qui n'en sont pas !
    Tu utilises des lien href ...
    Le propre du lien href est de recharger une page ...
    si tu recharge la page le js n'existe plus et a fortiori le json ...

    Il faut inhiber le href...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     $('#boutonbalisea').on('click',function(e){
    e.preventDefault();
    .../...
    ainsi le href ne sera pas lancé, tu restera sur ta page et le json survivra
    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 !

Discussions similaires

  1. [XL-2013] Récupération donnée sur page internet fonction getElementsByClassName
    Par - Dap - dans le forum Macros et VBA Excel
    Réponses: 107
    Dernier message: 21/05/2015, 23h06
  2. [XL-2013] Récupération nom de feuille en fonction des données d'une colonne
    Par jeremie84 dans le forum Excel
    Réponses: 4
    Dernier message: 04/10/2013, 09h13
  3. [MySQL] récupération de données dans 2 tables + fonction mail()
    Par matperino dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/03/2007, 00h54
  4. variable hors d'une fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/02/2005, 08h29
  5. Quick Report et impression de données hors BDD
    Par gRRosminet dans le forum C++Builder
    Réponses: 8
    Dernier message: 19/08/2002, 09h47

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