Question

Je souhaite télécharger, puis traiter un fichier dans une application Ruby on Rails. Le téléchargement de fichier est généralement assez court, mais le traitement côté serveur peut prendre un certain temps (plus de 20 secondes). Je souhaite donc donner à l’utilisateur un indicateur - quelque chose de mieux qu’un écran sans signification "traitement ...".

J'essaie d'utiliser le code suivant dans la vue

<%= periodically_call_remote(:url => {:action => 'progress_monitor', :controller => 'files'},
                 :frequency => '5',
                 :update => "setProgress('progressBar','5')"
                 ) %>

Le contenu du paramètre: update est le javascript que je veux exécuter toutes les 5 secondes

et le code suivant se trouve dans le contrôleur de fichiers

def progress_monitor
  render :text => 'whatever'
end

Finalement, la méthode progress_monitor renverra la progression actuelle sous forme d'entier (% terminé) et sera transmise au code JavaScript 'setProgress' (qui mettra à jour un élément à l'écran)

Cependant, je ne parviens pas à obtenir une réponse correcte du serveur qui puisse ensuite être transmise à JavaScript.

Quelqu'un peut-il aider ou est-ce que je l'aborde de la mauvaise façon?

Il y a une question complémentaire à celle-ci. J'ai initialement mis à jour cette question, mais la mise à jour était suffisamment différente pour justifier une nouvelle question, ici .

Était-ce utile?

La solution

periodically_call_remote () met à jour un div . Il n'appellera pas votre fonction JavaScript. Je ne suis pas un gourou JavaScript, mais pour résoudre votre problème, vous devez effectuer votre propre appel xmlhttp . Si j'étais vous, j'utiliserais la requête AJAX du prototype

http://www.prototypejs.org/api/ajax/request

et utilisez settimout ou setinterval de JavaScript pour l'interrogation périodique

http://www.elated.com/ articles / javascript-timers-with-settimeout-and-setinterval /

espérons que cela aide car en fait j'ai rencontré le même prb aussi =)

Autres conseils

L'option : update ne devrait répertorier que le div que vous souhaitez mettre à jour, PAS Javascript que vous souhaitez évaluer.

Les aides de Rails sont toujours très utiles dans cette situation, il n’est pas nécessaire d’écrire beaucoup de JS personnalisés. Si vous souhaitez exécuter JS lors du retour, un moyen simple consiste à restituer un modèle RJS. Si vous souhaitez le faire avec du HTML pur, restituez simplement un affichage (ou partiel, ou retournez directement depuis la méthode render avec le code HTML de la barre de progression) et placez le div de la barre de progression dans le champ. : option de mise à jour de la méthode periodically_call_remote .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top