etspring
@etspring
Начитанное быдло

Почему Rails4 не отрабатывает js при рендере?

Доброго времени суток.
Имеется select, на onchange которого делается ajax-запрос. В ответ должен отрендериться js, который делает append партиала.
Все запросы отрабатываются, в логах рендеридся и js и партиал, но аппенда не происходит.
Куда копать?

Rails 4.2.8, turbolinks включен.

Привожу код

JS в ассетах:
$( document ).on( "change", "#phone_vendor_select", function() {
  $.ajax({
    url: "unknown_devices/get_phone_models",
    dataType: 'script',
    data: {vendor: '11111'},
  });
});


Вьюха:
div.box-body
      table.table.table-bordered
        tbody
          tr
            th UserAgent
            th Вендор
            th Модель
            th Действия
          - @unknown_devices.each do |device|
            tr
              = form_tag unknown_devices_path, method: 'get', id: 'vendor',remote:true do
                td
                  = device.ua
                td
                  = select_tag "phone_vendor_select", options_from_collection_for_select(@phone_vendors, "id", "title"), include_blank: false
                td.mod_select id='mod_select'
                td
                  div.col-md-2
                    = submit_tag 'Сохранить', class: 'btn-sm btn-danger'


Контроллер:
def get_phone_models
    @phone_models = PhoneModel.all
    
    respond_to do |format|
      format.js
    end    
  end


JS.ERB
$(".mod_select").html('<%= render partial: "phone_model", collection: @phone_models %>');


И собственно партиал phone_model ( для простоты сделал в html.erb )
<div>
<%= phone_model %>
</div>


Логи:
Started GET "/unknown_devices/get_phone_models?vendor=11111&_=1496856121592" for 127.0.0.1 at 2017-06-07 20:22:05 +0300
Processing by UnknownDevicesController#get_phone_models as JS
  Parameters: {"vendor"=>"11111", "_"=>"1496856121592"}

  PhoneModel Load (0.3ms)  SELECT "phone_models".* FROM "phone_models"
  Rendered cpan/unknown_devices/_phone_model.html.erb (1.1ms)
  Rendered cpan/unknown_devices/get_phone_models.js.erb within layouts/cpan (3.7ms)
  Rendered layouts/navigation/_header.html.erb (0.0ms)
  Rendered layouts/navigation/_sidebar.slim (0.9ms)
  Rendered layouts/navigation/_layout.slim (2.2ms)


Как видно из логов - всё отрабатывает, но к сожалению ничего не аппендится.

Подскажите пожалуйста, куда копать?
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
@vsuhachev
dataType "script": Evaluates the response as JavaScript and returns it as plain text.


Я не суперский знаток jquery, возможно вам все-таки нужно использовать success и error коллбэки? В любом случае можно в js навставлять алертов и проверить js-консоль на ошибки...

А вообще я бы сделал так:
$.ajax({
    url: "unknown_devices/get_phone_models",
    dataType: 'text',
    data: {vendor: '11111'},
    success: function(data, textStatus, jqXHR) { $(".mod_select").html(data) },
    error: function(jqXHR, textStatus, errorThrown) { alert('Error') }
  });


А по get_phone_models отдавать просто html
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы