233 votes

Comment puis-je faire jQuery attente d’un appel Ajax finir avant de revenir ?

J'ai un serveur de fonction qui nécessite une identification. Si l'utilisateur est connecté, la fonction retourne 1 en cas de succès. Sinon, la fonction retourne la page d'identification.

Je veux appeler la fonction à l'aide d'Ajax et jQuery. Ce que j'ai à faire est de soumettre la demande avec un lien ordinaire, avec un clic-fonction appliquée sur elle. Si l'utilisateur n'est pas connecté ou la fonction échoue, je veux de l'Ajax à l'appel à retourner true pour que le href déclencheurs.

Cependant, lorsque j'utilise le code suivant, la fonction se termine avant l'appel Ajax est fait.

Comment puis-je rediriger l'utilisateur gracieusement à la loginpage?

$(".my_link").click(
    function(){
    $.ajax({
        url: $(this).attr('href'),
        type: 'GET',
        cache: false,
        timeout: 30000,
        error: function(){
            return true;
        },
        success: function(msg){ 
            if (parseFloat(msg)){
                return false;
            } else {
                return true;
            }
        }
    });
});

343voto

altCognito Points 23944

Si vous ne voulez pas retourner immédiatement la fonction $.ajax(), définissez l’option async sur false :

Mais, je tiens à souligner que ce serait contraire à la point d’ajax aussi, et vous devriez être manipuler la réponse dans les fonctions d’erreur et de succès. Ces fonctions s’appellera seulement lorsque la réponse est reçue depuis le serveur.

40voto

qxxx Points 3540

J’utilise pas $.ajax mais le $.post et $.get fonctions si je dois attendre la réponse que j’utiliser ceci :

31voto

idrosid Points 3672

L’objet XMLHttpRequest sous-jacent (utilisé par jQuery pour faire la demande) prend en charge la propriété asynchrone. Affectez-lui la valeur false. Comme

11voto

samuelagm Points 31

Je pense que les choses seraient plus faciles si vous codez votre pour charger la page appropriée au lieu de retourner ou `` .

Par exemple au lieu de retourner `` vous pourriez faire :

De cette manière lorsque la fonction de la réussite est appelée la page obtient redirigée.

-6voto

Vladimir Prudnikov Points 2106

À partir de la documentation de jQuery

"$.ajax() retourne le XMLHttpRequest qu'il crée. Dans la plupart des cas, vous n'aurez pas besoin de cet objet pour manipuler directement, mais il est disponible si vous souhaitez annuler la demande manuellement."

Donc, vous avez à l'utiliser comme ça

var xhr = $.ajax({....});

ensuite, regardez XMLHttpRequest documentation ( https://developer.mozilla.org/en/XmlHttpRequest ) . Il a readyState attribut. Essayez de configurer l'intervalle (setInterval) pour vérifier cette valeur, et quand il sera de 4, case responseText attribut pour la réponse.

Faire

$(".my_link").click(
    function(){
        var xhr = $.ajax({
            // not here
        });
        // here...
    };
);

Essayez de trouver quelque chose comme ça pour IE.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X