2016-07-13 8 views
0

Этот код выводит только data на консоль. В журнале сервера запросы не поступают. Я полностью сбит с толку. Мои другие обработчики кликов работают нормально. Почему мой код ajax ничего не показывает в журнале сервера, но только консоль? Спасибо.Рельсы с jQuery Ajax GET

# routes.rb 
    get 'organize/process' => 'organize#process_selections', 
           format: :json, as: :organize_process 
# organize_controller.rb 
    def process_selections 
    @selected_huddles = Huddle.includes(:huddle_membership_roles, :users) 
           .find(params[:huddle_ids]) 
    respond_to do |format| 
     format.json { render 'selections', format: :js} 
    end 
    end 

# js (inline with haml) 
    $('h2.action').on('click', function() { 

     //event.preventDefault(); 
     var huddle_ids = []; 
     $('.card.selected').each(function() { 
     huddle_ids.push($(this).data('huddle-id')); 
     }); 

     $.ajax('#{organize_process_path}', { 
     //method: 'GET', (API says default is async/GET) 
     //async: true, 
     data: JSON.stringify({'huddle_ids' : huddle_ids}), 
     contentType: 'application/json', 
     dataType: 'json' 
     }); 
    }); 

Update: Строка data выводится на консоль, даже когда я полностью удалить $.ajax вызов. Поэтому метод .each возвращается слишком рано, я думаю.

Update2: Обратите внимание, что я не представляю форму. Я не знаю, имеет ли это значение. Еще раз спасибо.

Update3: Я использовал неправильный взгляд. У меня есть Аякса, чтобы отправить запрос, но мое форматирование не так:

Started GET "/organize?{%22huddle_ids%22:[1]}" for ::1 at 2016-07-14 01:49:08 -0500 
Processing by OrganizeController#select as JSON 
    Parameters: {"{\"huddle_ids\":"=>{"1"=>{"}"=>nil}}, "organize"=>{}} 

Вот мой текущий код для JS и контроллера:

ответ

1

Вы ожидаете, что маршрут Rails будет правильно расширен JavaScript. Это не сработает.

Заменить

$.ajax('#{organize_process_path}', { 

с

$.ajax('organize/process', { 

Кроме того, как я упомянул в моем комментарии, заменить .each() вызов с петлевой для чего-то вроде этого:

$('h2.action').on('click', function() { 

    //event.preventDefault(); 
    var huddle_ids = []; 
    var selecteds = $('.card.selected') 
    for(var i = 0 i < selelcteds.length; i++) { 
    huddle_ids.push(selecteds[i].data('huddle-id')); 
    }); 

    $.ajax('#{organize_process_path}', { 
    //method: 'GET', (API says default is async/GET) 
    //async: true, 
    data: JSON.stringify({'huddle_ids' : huddle_ids}), 
    contentType: 'application/json', 
    dataType: 'json' 
    }); 
}); 
+0

Это хам. Я пробовал в обоих направлениях. – tidelake

+0

Ick. Вот почему я не использую Haml;) Может быть, эта ссылка помогает? http://chrisjmears.com/2009/10/haml-javascript/ В любом случае, я думаю, вам нужно будет правильно настроить маршрут Rails. <% = "# {organiz_process_path}"%> или что-то еще. – andrunix

+0

Да, я использую этот синтаксис. – tidelake

0

Пожалуйста, попробуйте, как это

$.ajax({ 
    url: '#{organize_process_path}', 
    data: JSON.stringify({'huddle_ids' : huddle_ids}), 
    contentType: 'application/json', 
    dataType: 'json' 
}); 
+0

Это дает тот же результат, только запись '{" huddle_ids ": [1,2]}' в консоли. – tidelake

+0

Вы проверили вкладку своей сети в своем браузере и не видели каких-либо запросов xhr? И какую консоль вы здесь имеете в виду? Потому что я не вижу в вашем javascript 'console.log', поэтому я не думаю, что его javascript-консоль. – Kumar

+0

Я использую Chrome devtools. Данные поступают на консоль через вызов ajax, но на этой вкладке событий XHR не происходит. – tidelake