obtenir le nom de la fonction courante dans javascript
j'ai ce morceau de code:
function MyFunction()
{
$.ajax({
type: "POST",
url: "ajax.php",
dataType: "json",
data: "foo=bar",
error:function(XMLHttpRequest, textStatus, errorThrown)
{
alert(arguments.callee);
},
success: function(jsonObject)
{
//do something
}
});
}
ce que je veux c'est que l'alerte à l'intérieur de de error scoope montre le nom de la fonction, dans ce cas "MyFunction" mais à la place ce que je reçois est la fonction error:function.
Comment puis-je y parvenir?
7 réponses
-
var my_arguments;
function MyFunction() {
my_arguments = arguments;
$.ajax({
type: "POST",
url: "http://www.google.com",
dataType: "json",
data: "foo=bar",
error:function(XMLHttpRequest, textStatus, errorThrown) {
alert(my_arguments.callee.name);
},
success: function(jsonObject) {
//do something
}
});
}
est ce que vous avez besoin.
arguments
dans le error
fonction fait référence à cette méthode est propre arguments
objet. Il ne fait pas référence à la fonctionarguments
objet. C'est pourquoi vous obtenez error:MyFunction
. L'utilisation d'une variable globale dans ce cas vous fournit une solution à ce problème.
Aussi, pour obtenir que le nom de la fonction, vous devez utiliser arguments.callee.name
. arguments.callee
va vous donner une référence à la fonction d'appel, pas un nom de la fonction dans la chaîne de caractères.
Ce que vous voulez, c'est arguments.callee.name
toutefois, dans votre cas, la fonction dans le contexte plus MyFunction
mais la méthode anonyme s'est déclarée comme le gestionnaire d'erreurs...
en mode strict, vous ne pouvez plus faire référence à callee (voir la discussion à Javascript: le tableau d'arguments est-il déprécié?) , donc la réponse de @Sayem n'est valable que si vous n'utilisez pas le mode strict. En général, vous souhaitez invoquer le mode strict en raison de ses avantages pour la fiabilité de votre code (voir @Johnressig article