jQuery.ajax() de la réussite de rappel de stocker des données de retour
Je vais essayer d'obtenir des données à partir d'un script PHP dans un projet. Tous les exemples que j'ai trouvé de la recherche pour AJAX fonctions de rappel "utiliser" les données déjà dans le rappel lui-même, mais je veux récupérer les données et de les stocker dans un sens prêt à être retourné.
function getEle (id) {
var element = [];
$.ajax({
url: 'slides.php',
type: 'POST',
data: {"id": id},
success: function(data) {
var content = data;
element[0] = id;
element[1] = content;
//if I alert(element[1]); here it will work!
}
});
alert(element[1]); //here it just won't :/("undefined")
return element;
}
Quelque part dans mon script une fonction doit getEle(ments)
mais tout ce que j'obtiens est undefined
.
est-il un moyen de faire ce que je veux? Ou est-il peut-être une meilleure façon de le faire?
Bienvenue dans le monde merveilleux de async! Vous ne pouvez pas le faire.
OriginalL'auteur Otze | 2011-11-03
Vous devez vous connecter pour publier un commentaire.
Une solution serait de passer à une fonction de rappel à
getEle()
:Et passer ensuite une fonction contenant le code de quoi faire quand vous avez le contenu de l'élément:
Haha, content de vous voir encore la marche de la route de la async problème. Je suis toujours en marchant trop. 🙂
OriginalL'auteur Avaq
Deux choses sont à défaut ici:
var
et il suffit d'écrirecontent = data
ce qui le rend accessible à l'échelle mondiale.Jetez un oeil à ce.
OriginalL'auteur buschtoens
Voici ce qui se passe dans votre code:
Vous pourriez considérer une variable globale pour résoudre ce problème:
Sinon, vous pouvez transformer votre AJAX dans un appel synchrone:
La seule autre option que je peux voir, c'est de garder tout ligoté à l'intérieur de la "réussite" de rappel, vous avez déjà découvert fonctionne très bien.
async: false
je préfère laisser sans un commentaire.Ok, mais maintenant vous ai vissé mon idée 😉
Si je fais de l'ajax synchrone mon diaporama ne fonctionne pas.
OP savait déjà que
element
était fixé à l'intérieur de la "réussite" de rappel; je ne pense pas que ce besoin de le répéter. Comme pour les variables globales, ils sont souvent mal utilisés, mais ne sont en aucune façon inutile. Si cette donnée doit être revu après certains événements sont déclenchés, pourquoi ne pas le stocker à l'échelle mondiale?parce que vous n'avez aucune garantie que ces données seront disponibles. Comme je l'ai dit le seul événement/l'endroit où vous êtes garanti pour la mise à disposition des données est à l'intérieur de l'AJAX succès de rappel.
OriginalL'auteur Blazemonger
Votre rappel exécute un certain temps après que le reste de votre code se termine.
Vous avez besoin pour passer la valeur à l'aide d'un rappel, la façon
$.ajax
.OriginalL'auteur SLaks
Votre alerte finit par être indéfini, parce que l'appel AJAX est asynchrone. Ainsi, alors que l'appel AJAX est en attente de la réponse du serveur, le script continue sur l'alerte, à quel point
element[1]
n'est pas encore défini.Vous devez placer votre
return element
ligne à l'intérieur de lasuccess
fonction de rappel.vous êtes très à droite sur l'async chose, mais êtes-vous sûr que le retour dans la réussite de la fonction? Je veux dire fera le getEle de retour de la fonction de quelque chose?
Je voudrais faire l'appel ajax synchrone
Je ne voudrais pas faire l'appel AJAX synchrone. Ce genre de défaites le but de l'AJAX. Je voudrais simplement utiliser les résultats de l'appel AJAX dans la réussite de rappel.
Dimitrov, sycnchrounous ajax n'est pas à l'encontre du but de l'AJAX de l'omi. Je viens de suggérer la solution la plus simple. Ce que vous avez suggéré est bon aussi longtemps que vous ne faites pas beaucoup d'opérations avec l'ajax réponse (à se demander comment il aurait l'air). Un événement peut être déclenché aussi, ou une fonction de rappel envoyé en paramètre à la myEle fonction (la fonction qui est appelée à l'intérieur de la fonction de réponse) pour que le code soit plus beau.
OriginalL'auteur maxedison