詰まったところ
以下のように、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の値を変えてみる。
search/?の後のcategory変数に格納されたhogeが返還されていることがわかります。
HTTPメソッドがGETであるにも関わらず、dataに指定したオブジェクトをクエリ文字列に変換しないためsearchの後に何もないことがわかります。
ご指摘があればコメント欄にてご指摘いただければ幸いです。