jQuery.load () ne fonctionne pas avec une fonction définie en tant que rappel?

Quelqu’un peut-il m’expliquer pourquoi je rencontrais une situation critique avec ce bloc de code:

$("#someid").load( "home.php", callback_function ); function callback_function() { //some jQuery.get() goes here } 

et pas ce bloc de code:

 $("#someid").load( "home.php", function(){ callback_function(); } ); function callback_function() { //some jQuery.get() goes here } 

La condition de concurrence dans le premier bloc de code était que le traitement dans callback_function () ne s’exécute pas après le chargement, mais semble s’exécuter de manière asynchrone et bousillerait des éléments de l’interface utilisateur (ces éléments de l’interface utilisateur dépendaient de jQuery.get () en revenant). Je suis nouveau sur jQuery / JavaScript et je me demandais pourquoi j’avais besoin de l’explicite “function () {callback_function ();}”. Merci!

vérifier envoyer une fonction de rappel jquery à l’intérieur d’une variable

déclarer la fonction comme

 function callback_function(){ //some jQuery.get() goes here } 

ou

 var callback_function = function(){ //some jQuery.get() goes here } 

alors essayez ceci

 $("#someid").load( "home.php",null, callback_function ); 

transmettez le paramètre de rappel en 3ème argument pour éviter toute confusion avec l’API de chargement jquery (désolé de ne pas obtenir le mot exact :)).

voir la documentation de chargement ,

Javascript ou n’importe quel langage de script fonctionne en exécutant du code lexicalement. J’entends par là qu’il n’a pas de méthode principale de sorting.

Ainsi, dans le premier extrait de code, la fonction de chargement est appelée et se voit atsortingbuer une fonction qui n’a pas encore été déclarée. Dans le deuxième extrait de code, la fonction est alignée sur le chargement de la méthode. Par conséquent, elle n’échoue pas.

Si vous définissez d’abord la fonction puis appelez load, votre premier extrait de code devrait également fonctionner.

 function callback_function(){ } $("#someid).load("home.php", callback_function); 

METTRE À JOUR

Il semble que votre question concerne le fait de rendre l’appel async versus sync. En général, je refactoriserais mon code si j’avais besoin d’un appel ajax pour être asynchrone, mais vous devriez pouvoir contourner ce problème en utilisant la base jQuery ajax.

 $.ajax({ // will not work for jsonp or cross domain requests, will force success to run before // other code async: false, url: "load.php", dataType: "html", success: function(response) { $("#some_id").html(response); } }); 

Il semble que votre fonction de rappel n’a pas été déclarée avant son utilisation.

Donnez à ceci un coup de feu:

 $("#someid").load( "home.php", callback_function ); function callback_function() { //some jQuery.get() goes here } 

Je recommanderais d’utiliser JSLint (JSLint.com), car cela vérifiera votre syntaxe et cherchera ces erreurs.