2009-10-19 7 views
0

J'ai un grand document Excel généré lorsque l'utilisateur clique sur le lien de téléchargement. Lorsque vous cliquez sur le lien de téléchargement, le navigateur ouvre la boîte de dialogue standard d'annulation d'enregistrement. Le problème est que le temps d'attente peut être très long, par ex. 15 secondes ou plus avant que la boîte de dialogue n'apparaisse. Je veux montrer un gif occupé pendant que la demande est en cours. Comment puis-je accomplir cela? Je suis assez sûr que je peux montrer un gif facilement en utilisant jQuery, mais je ne suis pas sûr de savoir comment arrêter/cacher l'indicateur occupé lorsque le nouveau document (Excel Doc) a fini de charger. Y a-t-il un événement javascript auquel je pourrais attacher un gestionnaire?Afficher un gif occupé après que l'utilisateur ait cliqué sur un lien

Répondre

2

Une autre option est la méthode de fichier temporaire: Is there a way to detect the start of a download in JavaScript?

En gros:

  1. utilisateur clique sur le lien de téléchargement/bouton
  2. Une requête AJAX est envoyée pour créer le doc excel. Montre l'indicateur 'occupé'.
  3. Le document Excel est créé et enregistré dans un fichier temporaire sur le serveur. Une réponse est envoyée contenant un identifiant unique identifiant le fichier.
  4. La réponse AJAX est gérée côté client. Masquer l'indicateur 'occupé'. window.location est remplacé par quelque chose comme 'download.aspx?id=###' qui invite l'utilisateur à enregistrer le fichier.
2

Le problème ici est que cliquer sur le lien déclenche une autre requête qui n'a rien à voir avec la première. Vous pouvez avoir le code qui gère la demande de téléchargement de mettre à jour une sorte de données de session, qu'un peu d'Ajax sur la page de liaison interroge pour déterminer quand le gestionnaire de demande est en train d'offrir les données à télécharger. Alternativement, vous pouvez simplement faire expirer après une période de temps raisonnable, disons 30 secondes, et peut-être offrir une explication. Cela pourrait alors passer à travers deux états:

"Click here to download the super-duper PDF of awesomeness!" 
"Please wait, generating a whole dollop of fonty goodness..." 
"It may take some time to bundle all that uber-data into a download...if nothing's happening, maybe you want to try again?" 

Cela semble être l'approche Google Mail prend en matière de délais d'attente ou la détection des problèmes similaires.

Questions connexes