Есть ли обратный вызов, когда завершается вызов Angular DTOptionsBuilder ajax?

Я использую таблицы данных angular, и у меня есть код, который выглядит так:

this.dtOptions = DTOptionsBuilder.newOptions()
    .withOption('ajax', {
        type: 'POST',
        contentType: 'application/json',
        processData: false,
        beforeSend: function(xhr, settings) {
            ...
        },
        data: function(data) {
            ...
        }
    })
    .withDataProp('data')
    .withOption('processing', true)
    .withOption('serverSide', true);

Все это работает правильно, и таблица на странице заполняется данными при возврате вызова ajax. Все, что я хочу сейчас сделать, это определить, когда завершится этот вызов ajax. Я пробовал использовать это прямо под beforeSend:

success: function(data, textStatus, jqXHR, fnCallback) {
    console.log(data);
}

Это фактически выводит возвращенные данные на консоль, но когда я добавляю этот обратный вызов success, таблица на странице никогда не заполняется данными. Итак, как я могу запустить обратный вызов, когда ajax выполнен, и моя таблица на странице все еще заполнена данными, как обычно?


person Ryan    schedule 05.09.2016    source источник


Ответы (1)


dataTables внутренне использует обратный вызов ajax success, поэтому вы нарушите работу, если переопределите это. Однако dataTables вводит свой собственный обратный вызов dataSrc, который запускается из обработчика успеха dataTables, чтобы дать вам возможность манипулировать ответом до того, как будут вставлены какие-либо данные:

this.dtOptions = DTOptionsBuilder.newOptions()
  .withOption('ajax', {
     dataSrc: function(json) {
       //success!
       console.log(json);
       return json
     },
     type: 'POST',
     contentType: 'application/json',
     processData: false,
     ....

см. демонстрацию -> http://plnkr.co/edit/94EWyDanIawCJJgyagiy?p=preview

Как вы можете видеть в демонстрации, у вас также есть альтернатива обратному вызову ajax complete:

ajax : {
  complete: function(jqXHR, textStatus) {
    console.log(jqXHR.responseText)
  } 
  ..
}
person davidkonrad    schedule 06.09.2016