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

JavaScript Discussion :

affectation de variables


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par d�faut affectation de variables
    Bonjour,

    J'ai un probl�me que je n'arrive pas � comprendre, j'esp�re que quelqu'un pourra m'aider ou au moins m'orienter:
    Je fait une affectation de variable en Javascript (un tableau - rempli - dans un autre - vide) qui ne marche que lorsque je fait un point d'arr�t avec Firebug. Si je ne fait pas de point d'arr�t, le script me dit que la variable dataKeep "is undefined".

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var data=new array();
    var dataKeep=new array();
     
    function initPage() {
        initCascadeList();
        SubmitNavigation();
        //TODO: debug: l'affectation qui suit ne marche que avec un point d'arret dans Firebug !!!??? Pourquoi ???
        dataKeep=data;
    }
    La fonction SubmitNavigation() appelle une autre (SendUsingAjaxJson() ) qui fait (entre autre) l'affectation de data avec un appel AJAX au format JSON:
    data= eval('('+ xmlhttp.responseText +')');

    Au d�part data �tait d�clar�e sans var (donc globales) dans SendUsingAjaxJson() et dataKeep de m�me dans initPage()

    J'ai ensuite essay� de les d�clarer en globales, avec var, hors des fonctions avec:
    var data=null; ou var data=new array() - voir exemple ci-dessus - mais le r�sultat ne change pas.

    Merci de vos retours

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par d�faut data et keepData sont des objets, pas des tableaux
    Bon, en fait, data et keepData ne sont pas des tableaux, mais des objets. Cela dit, en les d�clarant comme tel, �a ne marche pas mieux ;(

    var data = new Object;
    var dataKeep = new Object;

  3. #3
    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 : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    Si tu remplis ton objet via une requ�te AJAX, il faut laisser le temps � cette requ�te de se terminer.
    Il faut soit la passer en mode asynchrone, soit g�rer le traitement dans le callback.
    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

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par d�faut
    Merci pour cette r�ponse. Je d�bute en AJAX et JSON, donc je ne comprend pas bien celle-ci. Est-ce que ma fonction pour r�cup�rer mon objet JSON est asynchrone ?

    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
    function SendUsingAjaxJson(myURL) {
        if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {
               data= eval('('+ xmlhttp.responseText +')');
            }
        }
        xmlhttp.open("GET",myURL,true);
        xmlhttp.send();
    }

  5. #5
    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 : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    Oui, ta requ�te est asynchrone.
    Ceci dit, conceptuellement, ton code n'a pas vraiment d'int�r�t.
    Si j'en crois tes noms, dataKeep te sert � conserver les valeurs initiales de l'objet.
    Or en faisant
    tu affectes � dataKeep une r�f�rence � data, donc les deux �volueront en m�me temps...
    Autant faire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        data= eval('('+ xmlhttp.responseText +')');
        dataKeep= eval('('+ xmlhttp.responseText +')');
    }
    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

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    8
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par d�faut
    En fait, je voudrais garder effectivement une copie de data au chargement de la page (initPage �tant appel� avec window.onload) dans keepData, et NON une r�f�rence.

    ensuite, � chaque appel de SendUsingAjaxJson(), je veux le faire �voluer ou non, en fonction de checkboxes selected ou non.

    J'ai un peu simplifi� mon code dans mes posts pr�c�dents. Voici le vrai code complet (avec mes diff�rents essais comment�s):

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    //TODO: Faire une classe plus générique avec form_submit.js
     
    String.prototype.startsWith = function(str)
    {return (this.match("^"+str)==str)}
     
    //var data = new array();
    //var dataKeep = new array();
    //var data = new Object;
    //var dataKeep = new Object;
    //var dataRaw;
     
    function initPage() {
        initCascadeList();
        SubmitNavigation();
        //TODO: debug: l'affectation qui suit ne marche que avec un point d'arret dans Firebug !!!??? Pourquoi ???
    //    dataRaw=xmlhttp.responseText;
    //    dataKeep= eval('('+ dataRaw +')');
    //    dataKeep = new Object;
        dataKeep=data;
    }
     
    function SendUsingAjaxJson(myURL) {
        if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {
               dataRaw=xmlhttp.responseText;
               data= eval('('+ xmlhttp.responseText +')');
               for(var key in data) {
                    if(key=="url") {
                        document.getElementById("thumbnail").src=data[key];
                    }
                    else {
                        if(document.forms['medias_modifier'][key+"Keep"]) {
                            if(document.forms['medias_modifier'][key+"Keep"].checked) {
                                //If the keep checkbox exists and is checked, then we store the kept data
                                dataKeep[key] = document.forms['medias_modifier'][key].value;
                            }
                            else {
                                //If the keep checkbox exists and is NOT checked, then we display retrieved data
                                document.forms['medias_modifier'][key].value = data[key];
                            }
                        }
                        else {
                            //If no check feature (keep checkbox does NOT exist), then we display retrieved data
                            document.forms['medias_modifier'][key].value = data[key];
                        }
                        if(key.startsWith('lieux_lev')) {
                            //If it is a cascadeList, then we call the onchange method
                            document.forms['medias_modifier'][key].onchange();
                        }
                    }
                }
            }
        }
        xmlhttp.open("GET",myURL,true);
        xmlhttp.send();
    }
     
    function SubmitNavigation() {
        document.getElementById("FormResult").innerHTML="";
        var currentIndex=document.forms['navForm'].indexMedia.selectedIndex;
        //TODO: Rendre la liste ci_dessous (mediaList) dynamique !!!
        SendUsingAjaxJson('medias_json.php?liste=mediaList&indexMedia='+currentIndex);
    }
     
    function NavigateTo (action) {
     
        var currentIndex=document.forms['navForm'].indexMedia.selectedIndex;
        var nbOfIndex=document.forms['navForm'].indexMedia.length;
        var newIndex=0;
     
        switch(action) {
            case "Next":
                if ((currentIndex+1)>(nbOfIndex-1)) {newIndex=0;} else{newIndex=currentIndex+1;}
                break;
            case "Previous":
                if ((currentIndex-1)<0) {newIndex=nbOfIndex-1;} else{newIndex=currentIndex-1;}
                break;
            case "First":
                newIndex=0;
                break;
            case "Last":
                newIndex=nbOfIndex-1;
                break;
        }
        document.forms['navForm'].indexMedia.selectedIndex=newIndex;
        document.forms['navForm'].indexMedia.onchange();
    }

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me d'affectation de variable
    Par bob33 dans le forum C
    R�ponses: 3
    Dernier message: 04/11/2005, 17h01
  2. Affecter une variable javascript � une variable php
    Par gwendy dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 17/10/2005, 20h58
  3. affecter une variable de type stringstream
    Par sorari dans le forum SL & STL
    R�ponses: 3
    Dernier message: 24/03/2005, 11h14
  4. [PS] affectation de variable
    Par madmortal dans le forum SQL
    R�ponses: 2
    Dernier message: 01/09/2004, 13h17
  5. script SQL : affectation de variables
    Par Laura dans le forum Requ�tes
    R�ponses: 3
    Dernier message: 28/10/2003, 21h32

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