2 votes

exécuter une fonction javascript à partir d'une variable de type chaîne et passer des paramètres

J'ai besoin d'appeler une fonction javascript définie par l'utilisateur à partir de mon plugin costom jquery et de lui passer des paramètres, par exemple :

function test(data)
    {
      var myfunc="function(data){alert(data);}"; //this is user defined function I   retrieved from html tag attribute
      var fn=new Function("("+myfunc+")();");
      fn.apply(this,arguments);
      return fn;
} 
test("hello");

Le résultat est indéfini, comment puis-je passer le paramètre de données de la fonction de test à la fonction définie par l'utilisateur ? merci d'avance !

mise à jour des questions :

J'écris un plugin jquery pour gérer les requêtes ajax, un peu comme asp.net mvc unobtrusive ajax, je récupère la fonction callfack ajax à partir de l'attrbute du tag html, par exemple :

<div data-ajax-success="function(data,status,xhr){alert(data);}"....

la valeur de l'attribut data-ajax-success est une fonction définie par l'utilisateur, elle peut avoir les formats suivants :

data-ajax-success="function(data,status,xhr){alert(data);}"
data-ajax-success="function(data){alert(data);}"
data-ajax-success="function(){alert('hello');}"
data-ajax-success="functionName"

J'ai besoin d'analyser la valeur de cet attribut comme une fonction javascript et de passer les paramètres de rappel jquery ajax à cette fonction, où data-ajax-success est le nom de la fonction, je pourrais l'appeler correctement en utilisant la méthode suivante définie dans Micrsoft jquery-unobtrusive-ajax.js :

function getFunction(code, argNames) {
        var fn = window, parts = (code || "").split(".");
        while (fn && parts.length) {
            fn = fn[parts.shift()];
        }
        if (typeof (fn) === "function") {
            return fn;
        }
        argNames.push(code);
        return Function.constructor.apply(null, argNames);
    }

mais lorsque data-ajax-success est le corps de la fonction, je ne peux pas lui passer de paramètre, voici mon exemple de code qui gère le callback ajax :

loadData: function (index, options) {
complete: function (xhr,status) {
            $(context.loading).hide(context.loadingDuration);
            getFunction(context.onComplete, ["xhr", "status"]).apply(this, arguments);
            },
        success:function (data, status, xhr) {
            $(context.updateTarget).html(data);
            getFunction(context.onSuccess, ["data", "status", "xhr"]).apply(this, arguments);
            },
            error: getFunction(context.onFailure, ["xhr", "status", "error"])
});

      $.ajax(options);
  }

quelqu'un peut m'aider ? merci beaucoup !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X