Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

appel d'une fonction à partir d'une string

5 réponses
Avatar
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)

5 réponses

Avatar
Bol
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
Avatar
unbewusst.sein
Bol wrote:

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)
Avatar
unbewusst.sein
Bol wrote:

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)
Avatar
Mickaël Wolff
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));
Avatar
Une Bévue
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 !