2010-07-17 6 views
2

Lorsque j'écris une fonction dans JSON, pourquoi dois-je l'enfermer dans une fonction anonyme?Pourquoi dois-je inclure une fonction dans une autre fonction?

Cela fonctionne:

$.ajax({ 
     type: 'POST', 
     url: 'http://www.myurl.com', 
     data: data, 
     success: function(data) { 
      alert(data); 
     } 
}); 

Cela ne fonctionne pas:

$.ajax({ 
     type: 'POST', 
     url: 'http://www.myurl.com', 
     data: data, 
     success: alert(data) 
}); 

Merci

Répondre

3

En bref, parce que vous êtes exécutionalert() et essayer de affecter le résultat au rappel success, donc cela ne fonctionnera pas (le résultat de alert() est undefined). Cependant, vous pouvez faire:

$.ajax({ 
    type: 'POST', 
    url: 'http://www.myurl.com', 
    data: data, 
    success: customFunc //*not* customFunc() which would call it 
}); 

Dans ce cas customFunc recevront les mêmes paramètres que success passe, il est donc la signature devrait être: customFunc(data, textStatus, XMLHttpRequest), mais il peut être un sous-ensemble, par exemple customFunc(data).

6

Vous pouvez le faire. Vous venez d'utiliser le mauvaissyntax.

La propriété success a besoin d'une fonction expression pas un appel fonction() (qui retourne alors une valeur en success);

Alors

success: myfunction 

au lieu de

success: myfunction() 
Questions connexes