2010-07-14 4 views
1

Je suis en train de télécharger du fichier asynchrone avec iframes, et je me demande si le simple fait d'élaguer l'iframe du DOM est suffisant pour annuler un téléchargement.La suppression d'un iframe du DOM arrêtera-t-il toujours un envoi POSTed à partir de ce iframe?

This discussion semble impliquer qu'il s'agit d'une mauvaise approche du problème globalement, mais que l'expert de JS refuse de révéler sa solution.

Quoi qu'il en soit, supprimer les iframe fonctionne dans Gecko + WebKit, mais je me demande si les gens ont de l'expérience avec d'autres implémentations DOM.

+0

Pour votre information:... BigResource a toujours été infecté par toutes sortes de saletés, je l'éviter si possible –

+1

D'accord, merci, je change la source de lien vers un moins spammy domain, qui peut être la source originale du thread – guns

+0

Merci Bien que Norton Safe Web les signale actuellement comme sûrs, il y a quelques mois, ils avaient un X rouge à côté de tous leurs résultats. –

Répondre

2

Ce mec dans la discussion n'a pas la moindre idée de ce dont il parle, IMO. Beaucoup se disent experts, mais ce ne sont que des gros canons avec des obus vides. Si vous voulez faire un téléchargement de fichier asynchrone, pourrait utiliser. Normalement, je ne recommande pas Flash, mais le widget SWFUpload est, IMO, l'un des meilleurs.

http://www.swfupload.org/

Autre que cela, vous pouvez jeter un oeil à cela, le code est assez laid, mais l'auteur semble affirmer que ce cross-browser.

http://www.webtoolkit.info/ajax-file-upload.html

Pour répondre à votre question: non, la suppression de l'iframe ne garantit pas que le téléchargement va vraiment arrêter ou que le processus de téléchargement a effectivement été annulé sur le côté serveur. En effet, supprimer le iframe du DOM ne garantit pas que quelque chose, quelque part ne l'utilise pas encore, n'est donc pas collecté. Au lieu de supprimer l'iframe, vous pouvez simplement définir une URL cible différente (ex: "about: blank") qui interrompt généralement la connexion avec le serveur et arrête en fin de compte tout transfert de données en cours. Vous pouvez ensuite supprimer l'iframe après cela.

Cependant, je suggère d'avoir un processus en deux étapes, où vous téléchargez le fichier, avec un champ caché contenant une valeur de hachage. Le fichier est stocké dans un répertoire temporaire sur le serveur. Lorsque le téléchargement est terminé, vous effectuez une deuxième requête avec le même hachage pour valider la fin du téléchargement du fichier et terminer le traitement du téléchargement. Cela garantit que si le téléchargement est annulé à mi-chemin, mais que le fichier a déjà été téléchargé sur le serveur, vous ne terminerez tout simplement pas le processus et vous pourrez avoir un autre processus pour nettoyer les fichiers téléchargés plus tard.

La première solution est plus simple, mais nécessite Flash :(

+1

Merci d'avoir réinitialisé l'iframe: iframe.src = "javascript: '';" ''; Je me sens plus confiant que c'est la bonne façon de le faire.WRT dans ma configuration, ça fonctionne plutôt bien avec JavaScript + Nginx, en combinaison avec les modules Upload et UploadProgress. – guns

0

Très probablement pas. Habituellement, le moteur JS fonctionne de manière asynchrone à partir du corps DOM. Changer le DOM n'arrêtera pas quelque chose qui est déjà en cours. Maintenant, si le JS refernace une partie manquante du DOM, ou vérifie si quelque chose existe pour continuer, cela pourrait fonctionner.

Questions connexes