la fonction d'attendre avec retour jusqu' $.getJSON est fini
Je suis en train d'écrire une fonction qui a pour obtenir la vignette de l'information à partir d'une vidéo à l'aide de l'intégrer.ly API, cependant, actuellement, la fonction renvoie une valeur avant même d'avoir obtenu le résultat JSON à partir de l'API.
Je suis en utilisant le code suivant:
function getThumbnail(vUrl) {
var thumbnail = '';
var title = '';
var caption = '';
var content = '';
$.when( $.getJSON("http://api.embed.ly/1/oembed?key=:key&url="+vurl) ).then(function(data){
var thumbnail = data.thumbnail_url;
console.log(thumbnail);
return {
thumbnail:thumbnail,
vurl:vurl
}
});
}
Cependant lors de l'utilisation du Chrome console Javascript, je peux voir que:
- la fonction est appelée
- undefined est retourné
- Demande XHR est fini
- variable vignette contenu est affiché dans la console
C'est évidemment le mauvais ordre.
Toute aide est grandement appréciée!
double possible de Comment faire pour retourner la réponse d'un appel AJAX?
OriginalL'auteur xorinzor | 2012-05-27
Vous devez vous connecter pour publier un commentaire.
Mise à jour de réponse
getJSON
retourne une promesse (lecture différée), de sorte que vous pouvez écouter. Mais puisque vous avez besoin d'un post-traitement, vous voulez de la chaîne d'unthen
qui vous permet de modifier la valeur résolue.Réponse originale à cette question
Vous pouvez utiliser un différée objet, et d'écouter l'
()
.Vous pouviez retourner
$.getJSON
's différé pour obtenir les données brutes. Mais à cause de "post-traitement", dans un objet, la coutume différé est nécessaire. Vous pouvez également passer un rappel àgetThumbnail()
:Merci beaucoup! Sauvé ma journée! 😀
Je voulais ajouter un merci, parce que c' (Différé) fixe exactement le problème que j'ai avec mon propre projet. Merci!
OriginalL'auteur Joseph
vous pouvez simplement utiliser
$.getJSON
's de rappel comme suit:REMARQUE:
Vous voyez que je vais appeler une fonction pour passer à la suite, lorsque vous essayez de
return
, mais vous ne pouvez pasreturn
résultat de l'appelant, fonction. Parce que,$.getJSON
est asynchrone.OriginalL'auteur thecodeparadox