2010-11-22 6 views
0

J'ai un fichier .js utilitaire qui saisit certaines données via Ajax. Maintenant, cette méthode utilitaire ne sait pas qui l'appellera. Ainsi, lorsque l'async Ajax est terminée, il doit renvoyer un objet à l'appelant. Je ne sais pas comment faire :(Avoir un problème avec une méthode de rappel pour cet appel jQuery getJSON AJAX

C'est le code que j'ai ...

function someMethod(a, b, c) { 
    // ... stuff ... 

    // Now fire it off, asynchronously! 
    var request = $.getJSON(url, function (jsonResult) { 
     var result = 
     { 
      json: jsonResult, 
      contentLength: request.getResponseHeader("Content-Length") 
     }; 

     // TODO: Now return this result to the caller. 
    }); 
} 

bien sûr, je ne peux pas utiliser return result; parce que c'est async. Je me sens comme j'ai besoin passer dans un paramètre qui est la fonction que le code ajax ci-dessus a besoin d'appeler, quand le résultat a été async terminé.Je ne sais pas comment .. car rappelez-vous .. cette méthode n'a aucune idée de qui l'appelle .. donc il ne connaît pas d'autres méthodes et d'autres choses

Toutes les idées, s'il vous plaît?

Répondre

3

Vous avez raison. Vous devrez passer la fonction à "someMethod" pour pouvoir y retourner les données. En fonction de la fonction de rappel, vous pouvez également définir son contexte correctement en utilisant l'appel ou en appliquant des méthodes. Le "contexte" est ce que le mot-clé "this" sera défini dans la fonction de rappel.

Si votre fonction de rappel ne fait aucune référence au mot clé "this", vous pouvez ignorer l'utilisation de call() ou apply() et appeler simplement la fonction comme dans le deuxième exemple. (par exemple rappel (résultat));

function someMethod(a, b, c, callback, context) { 
    // ... stuff ... 

    // Now fire it off, asynchronously! 
    var request = $.getJSON(url, function (jsonResult) { 
     var result = 
     { 
      json: jsonResult, 
      contentLength: request.getResponseHeader("Content-Length") 
     }; 

     // Now return this result to the caller. With the context set 
     callback.call(context, result); 

     // Example of callback without setting the context 
     //callback(result); 
    }); 
} 
+0

hi alex, je suis confus à propos du paramètre 'context'. Pouvez-vous donner plus de détails à ce sujet, avec peut-être un exemple? –

+0

Le contexte est à peu près une description de ce à quoi le mot clé "this" fait référence dans une fonction donnée lors de son exécution. Javascript a la capacité de changer ce que "ceci" fait référence en utilisant les méthodes call() ou apply() – Alex

Questions connexes