質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

1675閲覧

Ajaxを用いた画像投稿機能作成

hidekku

総合スコア8

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/06/21 05:17

###前提・実現したいこと
railsで簡単なchatアプリを制作しています。
画像投稿機能を実装中に以下のエラーメッセージが発生しました。

###発生している問題・エラーメッセージ

jquery.self-bd7ddd3….js?body=1:10074 Uncaught TypeError: Illegal invocation at add (jquery.self-bd7ddd3….js?body=1:10074) at buildParams (jquery.self-bd7ddd3….js?body=1:10062) at buildParams (jquery.self-bd7ddd3….js?body=1:10056) at buildParams (jquery.self-bd7ddd3….js?body=1:10056) at Function.jQuery.param (jquery.self-bd7ddd3….js?body=1:10096) at Function.ajax (jquery.self-bd7ddd3….js?body=1:9613) at HTMLInputElement.<anonymous> (message.self-b8ae95f….js?body=1:68) at HTMLInputElement.dispatch (jquery.self-bd7ddd3….js?body=1:5227) at HTMLInputElement.elemData.handle (jquery.self-bd7ddd3….js?body=1:4879) add @ jquery.self-bd7ddd3….js?body=1:10074 buildParams @ jquery.self-bd7ddd3….js?body=1:10062 buildParams @ jquery.self-bd7ddd3….js?body=1:10056 buildParams @ jquery.self-bd7ddd3….js?body=1:10056 jQuery.param @ jquery.self-bd7ddd3….js?body=1:10096 ajax @ jquery.self-bd7ddd3….js?body=1:9613 (anonymous) @ message.self-b8ae95f….js?body=1:68 dispatch @ jquery.self-bd7ddd3….js?body=1:5227 elemData.handle @ jquery.self-bd7ddd3….js?body=1:4879

###該当のソースコード

JS

1 $('#submit').on('click', function(e){ 2 e.preventDefault(); //通常の処理を止める 3 var textField = $('#message'); //formのtextを取り出す 4 var message = textField.val(); 5 var image = $("#js-file-field")[0].files[0]; 6 $.ajax({ //ajaxで非同期通信の開始 7 url: 'messages', 8 type: 'POST', 9 dataType: 'json', 10 data: { 11 message: { 12 text: message, //messageの中に入れている 13 image: image 14 } 15 } 16 })

###試したこと
どこから手をつけていいかわからないので何も対策ができていないです。

###補足情報(言語/FW/ツール等のバージョンなど)
Ajaxによって実装したいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/06/21 05:21

Ajax,jQueryなどもタグに追加しておくとより広く回答を得られると思います。
guest

回答1

0

おそらく、ですが...FormDataオブジェクトを利用してあげればできたきがします。

javascript

1 $('#submit').on('click', function(e){ 2 e.preventDefault(); //通常の処理を止める 3 var formdata = new FormData(); // formDataオブジェクトでパラメーターを渡す 4 var textField = $('#message'); //formのtextを取り出す 5 formdata.append('message', textField.val()); 6 formdata.append('image', $("#js-file-field")[0].files[0]); 7 8 $.ajax({ //ajaxで非同期通信の開始 9 url: 'messages', 10 type: 'POST', 11 dataType: 'json', 12 data: formdata 13 })

パラメーターをネストする方法を忘れてしまいましたが、たしか

javascript

1formdata.append('message[message]', xxxx) 2formdata.append('message[image]', xxxx)

とかだった気がします。ここは試してみてください。

あと、formdataオブジェクトをhtmlのformタグから取得する方法もあった気がします。コードの行数がすくなくできると思うので、調べて見てみるといいかもしれません。

投稿2017/06/21 05:41

h_daido

総合スコア824

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問