Variable fonction

Résolu
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 - 11 févr. 2008 à 11:05
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 - 11 févr. 2008 à 16:37
Bonjour ici

Voilà j'ai un ptit soucis avec js alors je solicite votre aide
J'ai fait ceci...

function Refresh(filterUrl,oParam,sResultDiv,sFunction){

    filterUrl = application + filterUrl;
   
    /*Eval du js a l url indiquee par le refresh*/
   
    Ext.Ajax.request({
        url: filterUrl,
        success: function(sResult, tt){
             if(sResult.responseText != ""){
                
                Ext.MessageBox.alert('Message', 'It worked!'+ sResult.responseText);
               
                //GridView(sResult.responseText,sResult);
                //sFunction(sResult.responseText,sResultDiv);

                GridView(sResult.responseText,sResultDiv);

                //sFunction(sResult.responseText,sResultDiv);
                //GridView(sResult.responseText,sResult);
            }
            else{
                Ext.MessageBox.alert('Message', 'update failed!'+ sResult.responseText);
            }
        },
        failure: function(sResult, tt) {
            Ext.MessageBox.alert('Message', 'pb de connexion!'+ sResult.responseText);
        },
        params: {response: Ext.util.JSON.encode(oParam)}
    });
   
}   

Le probleme est de pouvoir passer en parametre le nom de la fonction pour l'utiliser...
exemple:
Refresh('dossiers/checkfiche',oObj,'tab-fiche','GridView');
ou encore
Refresh('dossiers/checkfiche',oObj,'tab-fiche','MonAutreFonction');

Mais le passage en parametre et l'ecriture de sFunction(sResult.responseText,sResultDiv); ne fonctionne pas
Comment faire ?

Merziiii
--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

11 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
11 févr. 2008 à 15:42
>> et  il m'affiche bien  la chaine que je passe en paramètre
    ah....
    le nom de la function est passée dans une chaîne ?
    plus la même chose alors         mais entre nous pourquoi utiliser une chaîne ????

    si c'est une chaîne : window[la_chaîne_en_question]();
       mais un nom de function n'est pas une chaîne... normalement.

<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
3
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
11 févr. 2008 à 11:52
Bonjour,

    pas tout suivi....
    sans parler de ajax, dont on se fiche peut-être ?
    le souci est il "pouvoir passer en parametre le nom de la fonction pour l'utiliser" ?

    ch'tit exemple... ça baigne

    function a()
    {    alert("fonction a");    }
    function b()
    {    alert("fonction b");    }
    function c(quoi)
    {    quoi();    }

    c(a);
    c(b);

<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
11 févr. 2008 à 12:07
Bah justement ça ça marche pas >_< et c'est ce que je lis partout

Pour mon code il me dit sFunction not defined pourtant grace a FireBug, je met une point d'arret et met la souris au dessus du parametre et  il m'affiche bien  la chaine que je passe en paramètre.
Cela peut il venir de la portée de la fonction ?
Comment declare t-on une fonction globale ? (si ça existe)

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
11 févr. 2008 à 13:15
Salut,

Problème de référence non fermée je pense.
Lors de la construction d'un objet de la classe Refresh, les paramètres (filterUrl,oParam,sResultDiv,sFunction) sont bien connus.
Mais lors de l'appel de la fonction anonyme liée à l'évènement success, ces paramètres n'existent pas dans le contexte d'éxecution de la fonction. Par contre cette fonction est liée à l'instance (surement une de ces propriétés) et si tu fermes la référence sFunction avant l'appel, la valeur de cette variable sera accessible dans le contexte d'éxecution de la fonction.

essayes qqchose comme :

function Refresh(filterUrl,oParam,sResultDiv,sFunction){

    filterUrl = application + filterUrl;
    myFunction = sFunction; // Fermeture de la référence
    myDiv = sResultDiv; // idem

    ...

        success: function(sResult, tt) {
             if (sResult.responseText != "") {
                 this.myFunction(sResult.responseText, this.myDiv);

ou en modifiant le paramètre tt, je sais pas, je ne connais Ext que de nom...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
11 févr. 2008 à 14:10
Coucou
Je viens d'essayer et c'est une histoire de fou...
Pour le sResultDiv ça marche sans avoir besoin d'utiliser ta "technique".
mais pour la fonction non...
Je cherche sur une autre piste que tu as suggéré...

ou en modifiant le paramètre tt, je sais pas, je ne connais Ext que de nom...

On verra bien
--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
11 févr. 2008 à 15:59
Je suis dev php donc c'est ptet ça qui pose probleme...
En gros je fais comme ça en php

function toto($sAlert){
   echo $sAlert;
}

function AppelFunc($sFunction,$sTexte){
   $sFunction($sTexte);
}

AppelFunc('toto','youpi');  //affiche youpi

On est bien obligé de passer le nom de la fonction sous forme de chaine non ?
Le principe est celui de la variable fonction ou variable fonction
=> http://www.manuelphp.com/php/functions.variable-functions.php
Je l'utilise ainsi mais ...j'ai peut être raté un episode à javascript

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
11 févr. 2008 à 16:17
ah.... en php ?
    tu n'est pas en train de mélanger javascript/html et php ?
    tu sais comment on cause entre les 2 ?
    le php et le javascript ne se déroulent ni sur la même machine,
       ni en même temps.
    on n'appelle ni une fonction javascript en php, ni une fonction php en javascript.
    ajax ou pas.
<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
11 févr. 2008 à 16:28
Je viens de tester ceci comme le préconisait Bultez

window[sFunction](sResult.responseText,sResultDiv);

Et ça fonctionne... je comprends pas bien la raison du pourquoi il faut mettre window donc si tu as l'explication qui va avec je suis  preneur

Je crois que je confonds variable et valeur un tit peu ...
Dans ton exemple:

function a()
    {    alert("fonction a");    }
    function b()
    {    alert("fonction b");    }
    function c(quoi)
    {    quoi();    }

    c(a);
    c(b);

La variable est le nom de la fonction hors dans mos (bordel) le nom de la fonction depend du bouton ou l'utilisateur clique.
En fait j'aurais pu faire pareil...
C'est vraiment pas pareil que php

Dans Tous les cas un GRAND Merci à vous 2

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
11 févr. 2008 à 16:35
Je faisais juste le parallèle avec php ou on donne le nom de la fonction sous la forme d'un paramètre...
Pensant bien faire j'ai fait "pareil" en js
La communication entre php<=>js est ok
Je n'avais simplement pas vu que ton parametre n'etait pas une chaine sur ton exemple
--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
11 févr. 2008 à 16:35
>>je comprends pas bien la raison du pourquoi il faut mettre window
>>donc si tu as l'explication qui va avec je suis  preneur

    ben... un string et une fonction... pas pareil.

    appel d'une fonction :   
            lafonction();
    appel d'une fonction dont le nom est dans un string :
            var tmp="lafonction";
            window[tmp]();
  
<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
11 févr. 2008 à 16:37
Pour finir j'ai compris pourquoi le ...

window[sFunction](sResult.responseText,sResultDiv);

Je trouve que c'est très bizar je n'ai vmt pas le reflexe javascript encore
--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie
0
Rejoignez-nous