jQuery ajax Rechargement de la Page
Nous sommes de faire plusieurs requêtes ajax pour "sauver" des données dans une application web, puis de recharger la page.
Nous avons couru dans une situation où (car les demandes sont faites de manière asynchrone) la page est rechargée pendant ou avant les appels ajax sont terminés. La solution simple pour cela est de faire des appels ajax avec le "async": false option, forçant des appels synchrones. Cela semble fonctionner, cependant la boîte de dialogue du code qui s'exécute AVANT que tous les appels sont exécutées retard dans l'exécution.
Tous les conseils sont grandement appréciés!
Il convient également de noter que le fait de mettre un alert() avant de la recharger PERMET à l'ajax de demandes. (L'alerte est évidemment retarder le recharger assez longtemps pour que les demandes pour réussi à traverser)
Mis à JOUR avec des exemples de code:
$(".submit_button").click(function(){
popupMessage();
sendData(); //the ajax calls are all in here
location.reload();
});
function sendData() {
//a bunch of these:
$.ajax({
"dataType": "text",
"type": "POST",
"data": data,
"url": url,
"success": function (msg) {}
}).done(function( msg ) {
});
}
- pourriez-vous s'il vous plaît poster un exemple de code.
- Si vous êtes en train d'enregistrer les données et l'actualisation de la page dépend de la disponibilité des données, pourquoi ne pas afficher les données sans faire de l'ajax d'autres choses ...
- les données ne sont pas simplement posté en raison du fait que plusieurs formes complexes existent pas sur la page, y compris les données d'image
Vous devez vous connecter pour publier un commentaire.
Est venu ici à travers la poursuite d'un problème similaire et a décidé de répondre, même si c'est assez tard pour d'autres personnes qui pourraient se retrouver avec le même problème.
Je crois que ce que vous avez besoin est Ajax événements mondiaux.
Voir la Documentation de l'API
Surtout ici;
Maintenant pour ton cas, au lieu de liaison "ajaxComplete" événement si vous utilisez "ajaxStop" ce sera déclenchée lorsque toutes les requêtes Ajax en cours de traitement sont finis.
Je copie-collé votre code d'origine de violon et ajout de la partie j'ai juste recommandé avec certains journaux. jsfiddle.net/Tt3jk/7/ Des fins de test, j'ai appelé une semblable
SendData2()
fonction dans votre première fonction du succès de l'événement pour simuler un vilain demande asynchrone scénario. Si vous testez ce code sur un environnement réel(ou placez le SendData2 avec votre url qui répond à vos données de type "texte" ce que vous devriez voir sur la console est pour cette sortie.(1 - est de la console.journal de
SendData()
et 2 - est deSendData2()
):Vous pouvez en fait même le voir, même sur le violon, avec des erreurs sur la demande) quand recharger votre fonction est appelée. Si vous utilisez "ajaxComplete", recharger la fonction à l'intérieur de votre jQuery .cliquez sur la (les) fonction est appelée très tôt. Toutefois, si vous utilisez "ajaxStop" et de l'appel de fonction reload quand "ajaxStop" événement est déclenché, recharger la fonction sera appelée après que toutes les demandes sont terminés.
Je ne sais pas si le violon disparaît après un certain temps, donc je vais poster les modifications que j'ai faites ici sans journaux de la console:
PS. Vous ne savez pas si c'est une bonne pratique ou de ne pas faire une autre demande dans une demande, probablement pas. Mais je l'ai mis là pour montrer comment "ajaxStop" de l'événement est retardé pour être déclenchée jusqu'à ce que toutes les demandes en cours sont faites(ou terminé avec l'erreur au moins)...
il dépend de la façon dont vous faites vos demandes
Par exemple (vous ne le faites pas soumettre le formulaire. Sinon, vous devez prévenir la soumission du formulaire)
Prendre un coup d'oeil sur bloc complet
Cela permettrait d';
Description: Charger des données à partir du serveur et de placer le code HTML renvoyé dans la correspondance de l'élément.
http://api.jquery.com/load/