4

Railsサーバーからajax経由でファイルをダウンロードする際に問題があります:

ダウンロード コントローラーに show アクションがありsend_file、パラメーターが show アクションに渡された場合に呼び出されます。

select次に、サーバー上にあるファイルのリストを表示するドロップダウンがあるページがあります。値を選択してダウンロード ボタンをクリックすると、ダウンロード コントローラーによって処理される GET 要求を送信する ajax 要求が発行されます。

サーバーログを見ると、ajax リクエストが機能しているようで、次のように表示されます。

Started GET "/download?file=test.txt" for 127.0.0.1 at 2012-07-19 15:13:41 -0700
Processing by DownloadsController#show as HTML
  Parameters: {"file"=>"test.txt"}
Sent file /Users/Admin/Documents/rails_projects/test/public/data/test.txt (0.1ms)
Completed 200 OK in 0ms (ActiveRecord: 0.0ms)

ただし、実際には何もダウンロードされません。実際に手動でページにアクセスすると、show実際にファイルがダウンロードされます。私は何を間違っていますか?

--

Javascript

 <script type="text/javascript">
    $(function() {
      $('#button').click(function() {
        var s = $("select#dropdown_select").val();
               $.ajax({
                      type: 'GET',
                      url: 'http://localhost:3000/download?file=' + s,
                      dataType: "HTML"
                      });
      })
    });
  </script>

ダウンロードコントローラー

def show

    filename = params[:dl]

    if(filename.nil? == false)

    path = Rails.root.join('public/data', filename)
    send_file path, :x_sendfile => true

    end
end
4

1 に答える 1

8

私は同じ問題を抱えていましたが、JSクリック機能を使用する代わりに、レールタグを使用しlinkました。

もともと、私の見解では、(ajax呼び出しを生成する)link_toタグがありましたremote: true

リンクは、PDF を生成するアクションを目的としていました。PDF が生成され (エビとシンレポートを使用)、送信されましたが、ダウンロード ダイアログはポップアップしませんでした。

だから私は削除しremote: trueて追加するtarget: '_self'ので、このようになりました(私はhamlを使用しています)

!= link_to image_tag( 'print.png' ) + (I18n.t :buttons)[:comments][:print],
    customer_comment_path(@address_book),
    { target: '_self' }

そして、それはうまくいきました。

linkRailのタグを使ってコードを書き換えてみませんか?

于 2012-11-01T20:28:15.743 に答える