2 votes

Rails avec JQueryMobile - Double rendu avec send_data

Je crée dynamiquement un fichier csv avec ce code dans le contrôleur de rapports :

  def exportCsv
    @report = Report.find(:all)

     csv = CSV.generate do |csv|
       csv << ["id","cod_user_id","city","address","urgent level","description"]
       @report.each do |r|
        csv << [r.id,r.cod_user_id,r.city,r.address,r.urgent_level,r.description]
       end
      end

    send_data csv, :type => 'text/csv', :disposition => "attachment; filename=list.csv"
  end

Le code du lien dans le fichier show.html.erb est le suivant :

<a href="<%=url_for :controller=>"reports",:action =>"exportCsv"%>">Clicca qui</a>

Lorsque je clique sur le lien, le téléchargement ne démarre pas et une page blanche apparaît. Le téléchargement ne démarre que si je rafraîchis la page blanche. Lorsque je clique sur le lien de téléchargement, je veux que la page ouverte reste ouverte et que le téléchargement démarre.

MISE À JOUR I J'utilise jquery.mobile-1.3.1 si je n'utilise pas jquery mobile cela fonctionne, le téléchargement démarre et la page actuelle reste ouverte mais si j'utilise jquery-mobile le lien ne fonctionne pas dans le bon mode.

1voto

kardeiz Points 2721

Essayez d'utiliser ce qui suit :

send_data csv, :type => 'text/csv', :disposition => "attachment", :filename => "list.csv"

A partir de la send_data documentation ( http://apidock.com/rails/ActionController/Streaming/send_data ) :

:disposition - specifies whether the file will be shown inline or downloaded. 
   Valid values are ‘inline’ and ‘attachment’ (default).

1voto

xX_Cali_kiiD_Xx Points 21

Ajoutez data-ajax="false" aux attributs de votre lien. Par défaut, les liens sont chargés avec Ajax dans jQuery Mobile.

<a data-ajax="false" href="<%=url_for :controller=>"reports",:action =>"exportCsv"%>">Clicca qui</a>

D'après la documentation, vous pouvez également utiliser rel="external", ce qui empêchera également le chargement Ajax. La différence entre les deux est sémantique : rel="external" doit être utilisé pour créer un lien vers une url en dehors de votre domaine, tandis que data-ajax="false" est destiné aux liens internes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X