0

httpの代わりにAJAXで送信するフォームに取り組んでいます。これはフォームです:

    <%= form_for(:image, :remote => true, :url => {:controller=> 'questions',:action => 'upload'},:multipart => true) do |f| %>

    <%= f.file_field :image, :onchange => "$(this).parents('form').submit();"  %>

    <% end %>

:remote => true 上記のオプションを設定し、onchangeイベントでフォームを送信しました。controller に次のコードがあります。

def upload

     if request.xhr?
        @image = Image.new(params[:image])
        @image.save

            respond_to do |format|
                format.js { render :layout=>false }
           end
     else
           render :text => 'Request Wasnt AJAX'
     end
end

私のアクションは毎回テキストをレンダリングします。リモートタグが設定されているにもかかわらず、リクエストはAJAXスタイルではないようです(最終的なHTMLでも正しく表示されます)。これでどこが間違っているのかわかりません。FF と Chrome の最新のブラウザー バージョンでテストしたので、ブラウザーの問題ではないと思います。何か案は ?

更新: さらにデバッグを試みました。問題はファイル フィールドにあります。ファイル フィールドをテキスト フィールドに置き換えると、要求は AJAX (他のすべては同じまま) になります。ただし、ファイル フィールドを使用すると、常に非 AJAX 要求が送信されます。

注 : 全体的な目的は、AJAX 要求を介して画像をアップロードすることです。応答は何もレンダリングせず、HTML もリダイレクトもページのリロードも行いません。

4

2 に答える 2

3

Remotipart gem をインストールすることで動作するようになりました。ajax フォーム送信を使用して画像ファイルをアップロードするには、これが唯一の方法です。ここで git を見つけてください: https://github.com/JangoSteve/remotipart

于 2013-05-08T11:38:25.073 に答える