2011-08-03 16 views
0

私は「新しいブログ」フォームを作成しています。フォームにいくつかの写真アップロードフィールドがあります。 AJAXを使用して投稿リクエストを送信し、写真をアップロードし、写真のURLを返信して「新しいブログ」フォームに表示する方法はありますか?私のバックエンドはレール上のルビーで書かれています。AJAXリクエストと返信

私は意味があることを望みます!どんな助けでも大いに感謝しています!

おかげで、 アレックス

答えて

3

はい、それは少し複雑です。問題は、AJAX経由でアップロードされたファイルを送信することができないということですが、ほとんどの人が使用する簡単な回避策があります。

これは動作方法です。写真を目に見えないiFrameにアップロードします。このiframeをアップロードフォームのターゲットとして設定すると、ユーザーはページをリロードせずにフォームを送信できます。

例:iFrameを非表示に

<iframe id="upload"></iframe> 
<%= form_for @photo, :html => { :multipart => true, :id => 'photo_upload_form', :target => 'upload' }, :url => photos_path do |f| %> 
    <div class="field"> 
    <%= f.label :image, 'Upload Photo' %> 
    <%= f.file_field :image %> 
    </div>  
<% end %> 

...そしてもちろんの使用CSS。私はかつてdisplay: noneでiFrameを隠して問題があったと思うので、私のようなものを使用して画面外に動かす推薦:

#upload { position: absolute; left: -10px; top: -10px; width: 1px; height: 1px; } 

最後に、あなたは隠された内部でレンダリングされるビューではJavaScriptを使用することができますiFrameをwindow.parent経由でアップロードすると、アップロードされた画像を実際にアップロードフォームに表示することができます。

+0

興味深いことに、私は現在同様のことをやっています。写真のフォームをiframeの内側に置くだけで、写真を送信すると、フレームはアップロードされた写真にリダイレクトされます。 写真のURLを送り返すだけではありませんか?例えばexample.com/uploads/test.jpg ??? –

+0

これを実装する方法はいろいろありますが、最も簡単な方法は、完全に隠されたiFrameを1つだけ使用することです。 iFrameのビュー内にJSコードを記述する場合でも、URLを送信してJSを元のビューにする場合も、それはあなた次第です。 –

+0

偉大な、ありがとう、私はそれに行くだろう:) –

関連する問題