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 もリダイレクトもページのリロードも行いません。