1
0

More than 5 years have passed since last update.

Ajaxを使った非同期通信において、processData: falseを書いていたためにパラメータが飛ばなかったのでメモ

Posted at

詰まったところ

以下のように、processData: falseを書いていたためにdataの{category: hoge}を送ることができませんでした。processData: falseについて調べたことをメモします。

      $.ajax({
        url: '/urls/research/',
        type: 'GET',
        data: {category: hoge},
        dataType: 'json',
        // processData: false  ← falseにしていたためにcategoryパラメータが送れなかった
        contentType: false
      })

環境

Ruby: 2.3.1
Rails: 5.0.1

processDataについて

dataに指定したオブジェクトをクエリ文字列に変換するかどうかを設定します。初期値はtrueで、自動的に "application/x-www-form-urlencoded" 形式に変換します。DOMDocumentそのものなど、他の形式でデータを送るために自動変換を行いたくない場合はfalseを指定します。(引用:日本語リファレンス)

結論から言うと、

HTTP通信でGETの際には、processDataの指定はせず初期値のtrueを利用し、POSTの際にはprocessData: falseを指定します。

詳細

dataに指定したオブジェクト(一番上の例でいうとcategory: hoge)をクエリ文字に変換するかどうかということです。(クエリとは、検索をおこなう際の検索条件のことで、クエリ文字列とは、検索条件に必要な文字列のことです。URLの末尾にWebサーバに送信するデータを特定の形式で表記したやつですね。)

実際に type: 'GET'に固定してprocessDataの値を変えてみる。

  • processDataの指定はせず初期値のtrueを利用した場合 image.png

search/?の後のcategory変数に格納されたhogeが返還されていることがわかります。

  • processData: falseと指定した場合 image.png

HTTPメソッドがGETであるにも関わらず、dataに指定したオブジェクトをクエリ文字列に変換しないためsearchの後に何もないことがわかります。

ご指摘があればコメント欄にてご指摘いただければ幸いです。

1
0
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
1
0