LoginSignup
28
28

More than 5 years have passed since last update.

RailsでAjaxリクエストが2回行ってしまうときにチェックすべき3つの事

Posted at

1. jQueryを2回読み込んでいないか確認する

Rails3.1からAsset Pipelineが導入されたため、誤ってjQueryを2回読み込んでしまっている、なんて事故が起こりがちなようです。

  • まず、application.jsでrequire_treeしているときに、assets/javascript直下にjquery.jsを配置していないか確認する。
  • 上記を確認しても解消しない場合は、rake assets:precompileしたデータがpublic/assets以下にないか確認する。2回jQueryを読み込んでしまっていたスクリプトがそのまま残っているかも知れません。あったら削除してしまいましょう。
  • 再発防止のためにconfig/environments/development.rbに以下のコードを追加しても良いでしょう。
# Ignore /public/assets
config.serve_static_assets = false

2. イベントのバブリングで2回コールされていないか確認する

aタグにイベントを紐付けているときにありがちです。console.logを仕込んで確認をして、これが原因だった場合は以下のコードを追加しましょう。

$("a#hoge").live('click', function(event) {
  // …いろんな処理…
  event.stopPropagation();
});

3. dataTypeがscriptなのに、successコールバックでレスポンスをevalしていない確認する

実際には2回POSTしているわけではないのに、レスポンスのJavaScriptコードを2回評価してしまってはいないでしょうか。

$.ajax({
  type: "POST",
  url: url,
  data: data,
  cache: false,
  dataType: "script",
  success: function(data) {
    // やらなくていい
    eval(data);
  };
});

レスポンスのJSは勝手に評価されるので、successコールバック内のeval(data)が余計ですね。削除しましょう。

28
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
28