Во время запроса dataTable ajax скрытый элемент управления формы никогда не инициализируется - PullRequest
0 голосов
/ 09 марта 2019

У меня есть DataTable var table = $('#example').dataTable(), который должен быть заполнен при изменении значения в раскрывающемся списке.Я хочу выбрать запись в раскрывающемся списке, и это действие вызовет запрос AJAX, передавая val() выбранной записи в качестве идентификатора для запроса.

У меня также есть элемент управления select дляform, которая пуста во время разработки и заполняется другим AJAX-запросом.И последнее, но не менее важное: у меня есть скрытый элемент управления, в котором хранится идентификатор до его фактической публикации в DataTable:

<div>
  <select class="form-control" id="objs" style="display:none">
  </select>
</div>

<input class="form-control" type="hidden" id="oid" name="oid" value="0">

Вот как я делаю все остальное:

$('#objs').change(function() {
  $('input[name="oid"]').val(this.value);
  table.DataTable({
    ajax: {
      data: {oid: $('#oid').val()}
    }
  });
  //alert($('input[name="oid"]').val());
  table.DataTable().ajax.reload();
});

Раскрывающийся списокonchange Обработчик событий работает отлично и отображает идентификаторы объектов в окне предупреждения.Однако инструменты отладки Chrome показывают, что oid управление формой никогда не инициализируется .Таким образом, форма, которая создается внутри DataTable, публикуется без идентификатора объекта.Вот как это выглядит:

Array
(
  [oid] => 
)

Что я делаю не так?Я подозреваю, что могут быть некоторые переменные области видимости или DataTable просто игнорирует текущее значение oid, когда он запускает ajax.reload().

1 Ответ

1 голос
/ 11 марта 2019

В вашем коде значение для data: будет дано при инициализации $('#objs').change(function(), а не при его вызове.

Измените объявление data на функцию, и тогда она будет работать:

table.DataTable({
    ajax: {
      data: function ( d ) {
        d.oid = $('#oid').val();
      }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...