appel d'une fonction à partir d'une string

Le
unbewusst.sein
c'est une vérue )))

j'ai une fonction
new Request(page, id);

qui admet donc deux paramètres en strings.

je détourne l'id en y passant le nom d'une fonction :
new Request(
'php/items_number.php?cat='+datas['idx'],'javascript:delCategory:'+datas
['name']+':'+datas['idx']);

le "javascript:" en préfixe me sert à savoir si j'ai affaire à un id de
tag html ou à une fonction. les ":" séparents les différents champs :
nom de la fonction + 2 paramètres.

bon, ensuite je lance ma fonction par eval :
eval(function_name+"("+parseInt(String,10)+", '"+name+"',
"+parseInt(idx,10)+")");

bon, ça roule super bien MAIS je sais qu'eval, c'est à éviter
d'ailleurs, peut-on éviter eval en json ?

que faire d'autre ?

bien sûr je peux changer le constructeur de "Request" un xhr

--
« Il vaut mieux taxer les pauvres que les riches car
ils sont beaucoup plus nombreux »
(Margaret Thatcher)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bol
Le #23784221
bon, ensuite je lance ma fonction par eval :
eval(function_name+"("+parseInt(String,10)+", '"+name+"',
"+parseInt(idx,10)+")");

bon, ça roule super bien MAIS je sais qu'eval, c'est à éviter...



Tu l'as deja posé cette question ;-)

A+
Bol
unbewusst.sein
Le #23784261
Bol
Tu l'as deja posé cette question ;-)



c'était dans un autre contexte, celui d'une fonction et pas d'un
constructeur, bon ça ne doit pas être très différent.
j'imagine que je dois mettre un switch soit sur le nombre d'args soit
sur leur tupe.
je ne pense pas pouvoir (?) passé la fonction anonymement, genre :
new Request(page, function () {...});
--
« Il vaut mieux taxer les pauvres que les riches car
ils sont beaucoup plus nombreux »
(Margaret Thatcher)
unbewusst.sein
Le #23784311
Bol
Tu l'as deja posé cette question ;-)



ben en fait c'est très simple ))) :
function doit(aFunction){
aFunction();
}
function sayHello(name){alert("Bonjour "+name+" !")}


appel dans un "onclick" :
<input type="button" value="Do it"
onClick="doit(sayHello('Yvon'))">

mon cas est un peu plus compliqué :
dans la fonction je dois aussi passer un argument à la function
sayHello, j'essaie :

function doit(aFunction){
var greetings="Bonjour";
aFunction(greetings);
}
function sayHello(name, greetings){alert(greetings+" "+name+" !")}

mais là, je n'ai qu'un paramètre de passé, c'est name.
avec le même appel

ça ne marche qu'en passant un paramètre à doit et en construisant
l'autre dans doit :
function doit(aFunction, name){
var greetings="Bonjour";
aFunction(greetings, name);
}
function sayHello(greetings, name){alert(greetings+" "+name+" !")}

avec l'appel :
<input type="button" value="Do it"
onClick="doit(sayHello,'Yvon')">

--
« Il vaut mieux taxer les pauvres que les riches car
ils sont beaucoup plus nombreux »
(Margaret Thatcher)
Mickaël Wolff
Le #23874851
Désolé d'arriver après la bataille.

On 23/09/11 16:27, Une Bévue wrote:
bon, ensuite je lance ma fonction par eval :
eval(function_name+"("+parseInt(String,10)+", '"+name+"',
"+parseInt(idx,10)+")");



Si la function_name contient le nom d'une fonction définie
globalement, cette fonction est donc un attribut de l'objet global. Dans
un navigateur, ça se traduit comme ça :

window[function_name](parseInt(String,10), name, parseInt(idx,10));
Une Bévue
Le #23874981
Le 17/10/2011 00:58, Mickaël Wolff a écrit :
Désolé d'arriver après la bataille.

On 23/09/11 16:27, Une Bévue wrote:
bon, ensuite je lance ma fonction par eval :
eval(function_name+"("+parseInt(String,10)+", '"+name+"',
"+parseInt(idx,10)+")");



Si la function_name contient le nom d'une fonction définie globalement,
cette fonction est donc un attribut de l'objet global. Dans un
navigateur, ça se traduit comme ça :

window[function_name](parseInt(String,10), name, parseInt(idx,10));



ah oui, bien sûr, élémentaire )))

merci bien pour cette remarque !
Publicité
Poster une réponse
Anonyme