2009-07-31 8 views
3

Il me semble que les instructions javascript ne sont pas toujours exécutées les unes après les autres. Je sais qu'ils font comme ça mais parfois il semble que la fonction show() se déclenche en même temps que hide(), donc la logique échoue. Il y a des fonctions de rappel à utiliser, comme jQuery.load ("some.html", thenrunthis).Ordre d'évaluation en code JavaScript utilisant Ajax?

J'ai besoin de comprendre la logique de travail. toute aide/prospects?

thx à l'avance

+0

@Ionut: Je pensais vraiment que le titre de la question originale était meilleur. L'expression «ordre d'évaluation» est un peu trompeuse. –

+0

@ William, probablement. Vous pouvez l'éditer bien sûr, après tout, vous avez donné la réponse la plus appropriée. C'est le meilleur que j'ai pu trouver. –

+0

merci .. Je ne savais pas comment l'appeler en réalité. :) –

Répondre

-1

sont bons parce Callbacks ils empêchent le navigateur de se bloquer et devenir inutilisable lorsque vous travaillez. Cela permet au navigateur d'être toujours utilisable et de continuer à travailler sur le JavaScript lorsque l'élément précédent est terminé car il gère le travail de manière asynchrone.

jQuery.load("some.html",thenrunthis); 

Si le thenrunthis était pas là et le chargement de some.html a pris un certain temps la personne ne pouvait pas utiliser le navigateur jusqu'à ce qu'il soit terminé le chargement

+0

Votre déclaration n'est pas vraiment vrai. Les rappels n'empêchent pas le navigateur de se bloquer et de devenir inutilisable pendant le travail. Seule la fonctionnalité AJAX est asynchrone. Tout autre rappel est simplement appelé lorsque la méthode d'origine est terminée. –

+0

'Si le thenrunthis n'était pas là et le chargement de some.html a pris un certain temps la personne ne pouvait pas utiliser le navigateur jusqu'à ce qu'il ait fini de charger' Pas nécessairement correct - le navigateur serait toujours utilisable, mais le javascript ne serait pas capable de réagir à l'achèvement de l'opération de chargement. – belugabob

1

fonctions de rappel sont généralement associées à des événements asynchrones - et jQuery.load est un bon exemple.

Lorsque vous appelez une telle fonction, le résultat de l'appel n'est pas immédiatement disponible, même si le contrôle peut être renvoyé presque immédiatement au code appelant. Le but de fournir une fonction de rappel est de dire - 'Allez faire cette opération et, lorsque vous avez terminé, exécutez ce morceau de code pour traiter les résultats. En attendant, je vais faire autre chose '

Est-ce que cela a du sens?

1

Certaines fonctions ont des rappels car ils sont asynchrones.

Scénario. En javascript, vous voulez obtenir le contenu d'une autre page html. Vous appelez cette page mais le serveur est super lent. Voulez-vous que l'appel de la méthode javascript se bloque à ce moment-là, empêchant ainsi l'exécution? Réponse, non. Ce n'est pas une très bonne chose à faire pour l'utilisateur.

Entrez un appel de méthode asynchrone. Lorsque vous appelez la page x, au lieu d'attendre que cela revienne, le script continue. Cela empêche le navigateur des utilisateurs de se bloquer. Cependant, une méthode de rappel est donnée de sorte que lorsque les données reviennent, on peut agir. Cela permet à la page de ne pas être bloquée par des opérations potentiellement longues.

Avez-vous du sens?

6

Vous demandez vraiment sur le "A" dans AJAX. Il est synonyme d'asynchrone, et il vous permet de faire une demande sans blocking. La fonction de rappel sera exécutée si/quand la requête réussit, mais le reste de votre code continuera à s'exécuter. L'un des principaux avantages de cette approche est la réactivité de l'interface utilisateur. Un appel synchrone va geler le navigateur jusqu'à ce que votre demande revienne, ce qui pourrait prendre un certain temps.

Modifier: Pour développer un peu sur ma réponse originale, j'ai pensé que je ferais remarquer que les fonctions de rappel ne sont pas limitées aux requêtes AJAX. Puisque vous semblez utiliser jQuery, vous pouvez regarder le jQuery Events API pour plus d'exemples en utilisant les rappels.

Exemple: Supposons que vous souhaitiez répondre d'une certaine manière lorsqu'un champ de saisie de texte obtient le focus.Voici un exemple directement de la jQuery documentation dans lequel une fonction de rappel est utilisé pour répondre à un élément input obtient focus:

$("input").focus(function() { 
    $(this).next("span").css('display','inline').fadeOut(1000); 
}); 

Cette fonction est vraiment une fonction de rappel. Il sera appelé lorsque l'utilisateur sélectionne un élément input sur la page. Il y a une démonstration de travail du code ci-dessus dans l'action here.

+0

Je devrais également dire que je réalise que les fonctions de rappel sont utilisées pour de nombreuses raisons autres que les requêtes AJAX, mais que l'OP semble poser une question spécifique sur 'jQuery.load'. C'est pourquoi j'ai encadré ma réponse dans le contexte d'une requête AJAX. –

+0

Vous pouvez mettre l'accent sur cet aspect particulier de l'OP, c'est-à-dire la différence entre les rappels utilisés dans un contexte Ajax et les autres contextes. +1 sinon –

2

Les rappels sont utilisés en javascript, et dans n'importe quelle langue pour dire à un morceau de code quoi faire quand un événement donné se produit. Cela permet d'éviter de coupler tout votre code dans un grand désordre.

Voir l'entrée wikipedia.

1

En théorie, il n'est pas du tout garanti que les instructions javascript seront exécutées après le chargement complet de la page. Un navigateur fileté peut choisir d'exécuter le javascript lors du rendu du code HTML.

Les rappels sont un moyen de synchroniser les appels aux instructions javascript. Ils s'assurent que le code est exécuté dans un ordre prédéfini, après certains événements (comme «la page est complètement chargée»).

Questions connexes