6
votes

Comment appeler un rappel JS lorsqu'un téléchargement de fichier est-il terminé?

Je crée un téléchargement frontend pour une application avec Appengine Backend.

Ce que je veux faire est une solution de téléchargement de fichier, et je ne veux pas utiliser PLUPLOAD ou ce type de solutions prêtes à l'emploi.

J'ai essentiellement soumis les images sur un iframe, puis mettez une couverture pendant le téléchargement. Ensuite, après avoir fini, j'ai effectué un appel Ajax pour obtenir les ID d'image pour que la vue suivante soit rendue. Cependant, le rendu est toujours appelé avant que le téléchargement soit terminé, je ne reçois aucun ID d'image du backend. Canhelp?

Voici mon code pour le téléchargement xxx

"l'app.views.imageselect.Render (item_id) est ci-dessous: < PRE> XXX

Je ne veux pas utiliser la fonction de sécurité car elle ne sera pas flexible en fonction de la vitesse de connexion. Toute aide sera appréciée :)


3 commentaires

"Je ne veux pas utiliser PLUPLOAD ou ce type de solutions prêtes à l'emploi" - pourquoi pas?


Tout simplement parce que je veux savoir ce qui se passe derrière elle. Plus tard, je peux peut-être l'utiliser :)


En outre, qui sait que je peux améliorer les solutions disponibles


3 Réponses :


2
votes

Essentiellement, votre question se résume à cette question: vous voulez attendre de rendre votre appel AJAX au serveur jusqu'à ce que les données que vous demandez sont disponibles. Obtenir des notifications du serveur est délicate (selon la manière dont votre backend est implémentée), la meilleure solution à votre problème est donc probablement de simplement rendre l'appel Ajax périodiquement (dire, une fois par seconde) jusqu'à obtenir une réponse réussie du serveur.

Voici un certain code qui devrait faire cela: xxx


1 commentaires

Élégant, ne savait pas que vous pourriez nommer vos blocs «faire».



0
votes

Qu'est-ce qui vous manque, c'est une sorte de rappel du $ ('# INPUT-INPUT-3'). Soumettre () appel. Je pense ce qui suit fonctionnerait (pardon mon mauvais coffescript): xxx

Ceci est fondé sur l'idée que appelant "soumettre" met immédiatement la cible iframe dans non Etat prêt, qui semble raisonnable, mais je le testerais. Une fois que cela a fini de charger l'autre option que j'ai vue autour est d'avoir la page que les charges IFrame rappellent dans sa fenêtre parent (niveau supérieur). En JS, quelque chose comme: xxx

ou, si vous souhaitez utiliser des événements liés: xxx

où, bien sûr , vous avez mis en place un événement téléchargé-complet sur l'objet de document de niveau supérieur.


0 commentaires

1
votes

Si vous ne ciblez que des navigateurs modernes, les formdata de XHR2 peuvent permettre une approche très simple et élégante.

Le concept est:

  • Ajouter des données binaires à un objet formdata
  • Faites un appel $ .AJAX () avec l'objet FormData en tant que paramètre "Data" de l'appel d'AJAX
  • Lorsque le téléchargement est terminé, les rappels () $ .AJAX () ou les rappels complets () seront déclenchés

    Cette approche fonctionne avec le dernier Firefox, chrome, safari - http://caniuse.com/xhr2 .

    Voir ce post pour plus de détails: Envoyer MultiPart / formdata avec jQuery.ajax


0 commentaires