私は、現在ajaxを利用して、非同期で検索ができるようにしたいと考えています。しかし、送信ボタンを押しても、検索ができていない状態になっています(エラーは発生していません)。もしわかる方がいらしたら、どうぞ教えて頂きたいです。どうぞよろしくお願い致します。
参考にしたページ
https://qiita.com/__tambo__/items/409ccf256e84017ea307
controller
1def index 2 @meals = Event.where("event_name LIKE(?)", "%#{params[:keyword]}%") 3end
view
1<input id="meal_form" style="display: inline-block; position: absolute; width: 20px; height: 20px; left: 30px; width: 160px; border: unset;"> 2<input id="submit_form" type="submit" style="display: inline-block; position: absolute; width: 20px; height: 20px; left: 0;"> 3<ul class="meal_list"> 4</ul> 5
views/events/index.json.builder
json
1json.array! @meals do |meal| 2 # meal.nameがjsonデータのnameに代入されます 3 # json.〇〇の〇〇がデータから値を取り出す時に使う変数名となります 4 json.name meal.name 5end
search_result.js
javascript
1$(function(){ 2 $("#submit_button").click(function(){ //送信ボタンを押すとイベントが発火します 3 var input = $("#meal_form").val(); // フォームの値を'input'という名前の変数に代入します 4 $.ajax({ 5 type:'GET', // リクエストのタイプはGETです 6 url: '/events', // URLは/mealsを指定します。つまりmeals#indexのアクションをリクエストします 7 data: {keyword: input}, // コントローラへフォームの値を送信します 8 dataType: 'json' // データの型はjsonで指定します 9 }) 10 .done(function(data){ 11 // 通信に成功した場合の処理です 12 $('.meal_list').empty(); //前回の検索結果が残っている場合はそれを消します 13 data.forEach(function(meal){ 14 $('.meal_list').append(`<li>${meal.event_name} </li>`); 15 //データは配列形式でかえってくるので、forEachで繰り返し処理をします 16 //ここではデータの単数の変数名をmealと置いていますが、何でも構いません。 17 //ただし、値を取り出す場合は"ここで定義した変数名"."json.jbuilderで定義した〇〇(この例ではname)"で取得します。 18 }) 19 }) 20 .fail(function(){ 21 // 通信に失敗した場合の処理です 22 alert('検索に失敗しました') // alertで検索失敗の旨を表示します 23 }) 24 }) 25})
あなたの回答
tips
プレビュー