2010-09-23 6 views
0

Je veux faire une requête AJAX "en arrière-plan" de ma fonction JavasSript, mais mon script attend que la requête AJAX se termine avant de continuer à exécuter mon code.jQuery: Comment faire une requête AJAX et continuer sans attendre la fin de la requête?

$('div').hide(); 

$.get('/controller/action', { id: 'abc123' }, 
    function(data){ 
     //request completed 
     //now update the div with the new data 
     $('div').html(data); 
    } 
); 

$('div').slideDown('slow'); 

//by now hopefully the div has been updated 
//and the user hasn't waited too long 

Le problème est que l'animation slideDown attend d'exécuter jusqu'à ce que la demande a renvoyé une réponse. Comment puis-je obtenir l'animation à exécuter en même temps que la requête ajax?

+0

Hmm. Où est le code que vous voulez exécuter? C'est dans la fonction "Requête terminée"? Ou est-ce après $ ('div'). SlideDown ('slow'); ? – DashK

+1

Votre code fonctionne ... http://jsfiddle.net/pgG9J/ – chriszero

Répondre

4

Votre code devrait déjà faire la requête Ajax "en arrière-plan" (de manière asynchrone). La méthode jQuery.get() est un raccourci pour:

$.ajax({ 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType 
}); 

Et la méthode jQuery.ajax() est async: true par défaut.

+0

Le problème est que l'animation attend d'être exécutée jusqu'à ce que la requête ait renvoyé une réponse. – Andrew

+0

@Andrew: C'est étrange. Pouvez-vous essayer d'utiliser '$ .ajax' au lieu de' $ .get' et mettre 'async: true'? –

1

Mettre le slideDown() dans le rappel de succès

$('div').hide(); 

$.get('/controller/action', { id: 'abc123' }, 
    function(data){ 
     alert("Request completed"); 
     //now update the div with the new data 
     $('div').slideDown('slow'); 
    } 
); 

À moins que vous fournirez config par défaut pour AJAX avec async: false (doc).

+0

Le problème est que l'animation attend d'être exécutée jusqu'à ce que la requête ait renvoyé une réponse. En mettant l'animation dans le rappel, il faudra attendre que la requête soit terminée. J'essaie de faire la demande et de lancer l'animation en même temps. – Andrew

0

est-il possible que le div ne contient rien jusqu'à ce que la requête ajax est complète, et crée donc l'illusion qu'il attend?

avez-vous essayé le bon vieux alert() débogage après la requête ajax?

+0

oui, l'alerte s'affiche, puis après avoir cliqué sur OK sur l'alerte, l'animation se poursuit. – Andrew

+0

donc probablement la requête ajax ne bloque pas l'animation mais à la place, jusqu'à ce que la requête ajax soit terminée, l'animation n'est tout simplement pas visible en raison de l'absence de contenu dans la div? – Patrick

Questions connexes