2009-06-04 5 views
9

J'écris une jauge de progression de téléchargement basé par Javascript. Je veux utiliser la méthode de soumission multipart standard (plutôt que de soumettre le fichier dans un iframe). Au cours de la soumission, j'envoie des requêtes ajax qui renvoient le% terminé du téléchargement, puis met à jour la progression en conséquence.Safari n'autorise pas les requêtes AJAX après l'envoi d'un formulaire?

Tout cela fonctionne bien dans FireFox & IE. Cependant, Safari semble empêcher l'achèvement des requêtes ajax après que le formulaire principal a été soumis. Dans le débogueur, je peux voir les en-têtes de la requête, mais il semble que la réponse ne soit jamais reçue.

Quelqu'un est-il au courant de cela ou comment le contourner?

+2

S'il vous plaît poster un peu de code, peut-être il y a un moyen de contourner le problème – ichiban

Répondre

0

Cela ressemble vraiment à un comportement correct pour moi - et je suis surpris que Firefox et IE se comportent autrement. C'est comme si vous essayiez de quitter une page et que la page continuait à interagir avec vous - ça sonne vilain!

Je peux voir pourquoi cela serait bénéfique - mais j'espère que c'est seulement le cas si vous effectuez un POST à ​​l'uri auquel vous accédez actuellement, ou au pire same-domaine.

2

Utilisez-vous un iframe pour soumettre votre formulaire? Je devine qu'une fois que le formulaire est soumis, la page entre dans un état où plus de modifications au DOM peuvent être faites.

Vérifiez un didacticiel tel que this one pour plus d'informations.

3

Oui, c'est ainsi que Safari et tout navigateur basé sur WebKit (c'est-à-dire Google Chrome) se comportent. J'ai récemment couru dans ceci sur un progrès de téléchargement de dossier également. J'ai fini par utiliser la même technique vue à http://drogomir.com/blog/2008/6/30/upload-progress-script-with-safari-support pour faire fonctionner l'ajax. Dans mon cas, je ne voulais pas changer le look de mon application à celui que Drogomir utilise, mais la technique elle-même fonctionnait. Essentiellement, la solution consiste à créer une iframe cachée uniquement dans Safari qui charge jQuery et votre script AJAX. Ensuite, le cadre supérieur appelle une fonction dans ce cadre sur le formulaire submit. Tous les autres navigateurs fonctionnent toujours comme avant.

Questions connexes