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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

3051閲覧

ajaxのリクエスト数が多い。。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2016/07/07 09:25

編集2016/07/08 03:25

リクエスト数を1回にしたいです。

下記のコードでputをしているのですが、access_logをみると21回のリクエストが有りました。
まずどこを疑ったらよいでしょうか。。

###該当のソースコード JSとHTML

javascript

1 $('.menu_update').change(function () { 2 var name = $(this).attr('name'); 3 var id = $(this).attr('id'); 4 var val = $(this).val(); 5 var params = {}; 6 params[name] = val; 7 $.ajax({ 8 type: "PUT", 9 url: "/menus/" + id, 10 data: params 11 }); 12 });

html

1<div class="mdl-layout__tab-panel is-active" id="top"> 2 <h1>今日のメニュー</h1> 3 <table class="mdl-data-table"> 4 <thead><tr> 5 <th>Type</th><th>Name</th><th>Food</th><th>Weight</th><th></th> 6 </tr></thead> 7 <tbody><tr class="mdl-color--amber-200"> 8 <td></td> 9 <td>おこわ</td> 10 <td>ごはん</td> 11 <td><div class="mdl-textfield mdl-js-textfield" style="width: 50px;"><input class="mdl-textfield__input menu_update" id="31" type="text" name="menu[weight]" /><label class="mdl-textfield__label" for="menu_13">13</label></div></td> 12 <td><a data-confirm="削除しますか?" class="material-icons" rel="nofollow" data-method="delete" href="/menus/31">clear</a></td> 13 </tr></tbody> 14 </table> 15<br /> 16</div>

下記のようなlogが21回来ます

log

1xxx.xxx.xxx.xxx - dev [06/Jul/2016:05:33:07 +0900] "PUT /menus/31 HTTP/1.1" 302 116 "http://hoge.hoge/menus" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"

controllerの中

controllerの中の処理はupdateしているだけだと思います。。

ruby

1 # PATCH/PUT /menus/1 2 # PATCH/PUT /menus/1.json 3 def update 4 respond_to do |format| 5 if @menu.update(menu_params) 6 format.html { redirect_to @menu, notice: 'Menu was successfully updated.' } 7 format.json { render :show, status: :ok, location: @menu } 8 else 9 format.html { render :edit } 10 format.json { render json: @menu.errors, status: :unprocessable_entity } 11 end 12 end 13 end

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

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

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

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

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

guest

回答3

0

.menu_updateのchangeハンドラのところに、console.log('change')とか入れると21回でますかね?
もし出るとしたら、そこにブレークポイントを置いて、なぜ出ているか確認して方がよさそうです。

投稿2016/07/07 09:43

shi_ue

総合スコア4437

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

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

shi_ue

2016/07/07 09:44

回答がかぶっちゃった・・・こちらは無視してください。
退会済みユーザー

退会済みユーザー

2016/07/08 03:04

一件目の回答にコメントしたものとおなじになりますが、 console.log('change')を入れてみて確認をしてみました。 logのでかただとajaxを呼ばれてるのは一回のように見えました。 調べ方がわかりました!有難うございました!
guest

0

ベストアンサー

$('.menu_update').change(function () {});の中で、valをconsole.logで出力してみてください。
通常、changeイベントはinputからフォーカスが外れた時に元のvalと違うときに発生するものですが、なにかのjsの影響でchangeが文字列を打つ度に送られている可能性があります。そうであった場合、送信するタイミングをchangeではなく、なにかボタンを押した時等に変えることを考慮すべきかと思います。

投稿2016/07/07 09:41

masaya_ohashi

総合スコア9206

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

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

退会済みユーザー

退会済みユーザー

2016/07/08 03:02

有難うございます!consoleで確認して見ればよかったのですね。 ``` javascript $('.menu_update').change(function () { console.log('change1'); var name = $(this).attr('name'); var id = $(this).attr('id'); var val = $(this).val(); var params = {}; params[name] = val; $.ajax({ type: "PUT", url: "/menus/" + id, data: params }); console.log('change2'); }); ``` としたら、 ``` change1 application-477410d….js:32357 change2 application-477410d….js:10246 PUT http://localdev.menu.ful.tokyo/menus/31 net::ERR_TOO_MANY_REDIRECTS ``` と出てきました。jsは一回しかajaxを呼んでいないぽい気配なので、 アプリケーション側をもう少し調べてみます。 調べ方がわかりました!有難うございます!! shi_ueさんも有難うございました!
shi_ue

2016/07/08 04:27

解決済みになってますが、「ERR_TOO_MANY_REDIRECTS」が出てますので、サーバー側でリダイレクトループが発生しているみたいですね。 rubyは分からないんですが、redirect_toしているところが毎回呼び出されるんじゃないでしょうか。
退会済みユーザー

退会済みユーザー

2016/07/08 05:58

rails初心者で具体的な所は見てないのですが、 /menus/31を/menus/31.json にしたらリダイレクトしなくなりました。 仰るとおりアプリケーション側でredirect_toしているところがあるのかと思います。 ふんわりしているので細部まで追いたいところですが、 railsの話になるのと、とりいそぎやりたいことが出来たので解決にしました。 書いておいたほうがよかったですね!すみません!
guest

0

下記のコードでpostをしているのですが、

type: "PUT",type: "POST", ではないのですか?

投稿2016/07/08 03:12

kei344

総合スコア69364

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

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

退会済みユーザー

退会済みユーザー

2016/07/08 03:24

表記ミスですすみません!やりたかったのはPUTでした。質問を修正します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問