Rendre la fonction AJAX "get" synchrone / comment obtenir le résultat?
Je suis confronté à un problème de dollars.fonction get.
L'url contient JSON
mon code:
xyz = null
$.get('http://www.someurl.com/123=json', function(data) {
var xyz = data.positions[0].latitude;
});
alert(xyz);
//some more code using xyz variable
Je sais que xyz
alerte un résultat nul parce que le $.get
est asynchrone.
Si il ya une manière que je peux utiliser le xyz
en dehors de cette fonction get?
source d'informationauteur Diolor
Vous devez vous connecter pour publier un commentaire.
La vraie réponse est PASmais vous pouvez utiliser ceci:
get
est un raccourci. Vous pouvez faire la même chose, mais synchrone à l'aide de:Vous aurez à déclarer la
xyz
variable avant de l'appel ajax.C'est un problème commun avec Javascript. Le code Javascript doit être écrit dans la continuation passing style. C'est agaçant, mais c'est quelque chose que vous pouvez convertir sans trop réfléchir.
Fondamentalement, chaque fois que nous avons quelque chose comme
On peut le convertir en code asynchrone en faisant tout le code après les retours de fonction dans une fonction de prolongement et de tournage de x à partir d'une variable en paramètre de la poursuite de rappel.
Vous avez à regarder que son très facile d'écrire du code source de confusion. Un bon truc pour garder à l'esprit est que vous pouvez faire vos propres fonctions aussi recevoir des rappels. Cela leur permet d'être utilisés par la fonction différente (tout comme normale sync fonctions d'assistance qui retournent une valeur peut être utilisée par les différentes fonctions)
L'astuce ici est de changer toutes les instructions return de la fonction dans les appels à la fonction de rappel. Pense que si async fonction ne revint jamais et la seule façon de donner une valeur à quelqu'un de passer cette valeur à une fonction de rappel.
Vous pourriez vous demander pourquoi il n'y a pas un moyen plus facile de faire tout cela. Eh bien, il n'y a pas, sauf si vous utilisez une autre langue au lieu de Javascript (ou au moins quelque chose qui vous permet d'écrire du code asynchrone en synchrone style, mais compile automatiquement vers réguliers Javascript)