2014-11-06 4 views
1

Я пытаюсь использовать DataTables с успешным обратным вызовом. Поскольку я хочу дать пользователю предупреждение, если введенные значения, которые создают DataTable, имеют ошибку.Альтернативный вариант обратного вызова DataTables

К сожалению, DataTables требует успешного обратного вызова, поэтому я не могу его перегрузить.

В настоящее время код:

configurationBlockChart = $('#blockSearchTable').DataTable(
{ 
    processing: true, 
    serverSide: true, 
    stateSave: true, 
    bDestroy: true, 
    ajax: 
    { 
     type: 'GET', 
     url:"ajax_retreiveServerSideBlockNames/", 
     data: 
     { 
      'csrfmiddlewaretoken':csrftoken, 
      'username':username 
     } 
    }, 
    rowCallback: function(row, data) 
    { 
     if ($.inArray(data.DT_RowId, blockSelected)!== -1) 
     { 
      $(row).addClass('selected'); 
     } 
    }, 
}); 

Данные, возвращаемые этой Ajax Получить являются строки данных.

Однако, есть вероятность того, что данные, возвращаемые имеет ответ недействителен, с строки не вернулся

Я пытался добавить успех, прежде чем rowCallBack:

success: function(response) 
{ 
    if(response.status == "invalid") 
      //then inform user 
} 

пытались также использовать fnDrawCallBack

fnDrawCallback: function(settings, response) 
{ 
    console.log("Hello World!"); 
    if(response.status == "invalid") 
    { 
     $('#invalid').modal("show"); 
     $('#usernameSearch').modal("show"); 
    } 
} 

Однако fnDrawCallBack будет вызываться только в том случае, если возвращены строки.

Проблема в том, что иногда строки не возвращаются, а исключение предоставляется кодом javascript.

Я мог бы, однако, попытаться поймать, но я все равно хотел бы, чтобы мой сервер передавал json-статусы в код javascript.

EDIT: Используя xhr, он может поймать этот недействительный ответ, в то же время не мешая функции успеха для ajax.

$('#chartSearchUsername').click(function(event) 
{ 
    $('#chartConfigModal').modal("hide"); 
    $('#usernameSearch').modal("show"); 

    configurationUserChart = $('#userSearchTable').DataTable(
    { 
     processing: true, 
     serverSide: true, 
     stateSave: true, 
     bDestroy: true, 
     ajax: 
     { 
      type: 'GET', 
      url:"ajax_retreiveServerSideUsernames/", 
      data: 
      { 
       'csrfmiddlewaretoken':csrftoken 
      }, 
     }, 
     rowCallback: function(row, data) 
     { 
      if ($.inArray(data.DT_RowId, userSelected)!== -1) 
      { 
       $(row).addClass('selected'); 
      } 
     }, 
    }) 
    .on('xhr.dt', function(e, settings, response) 
    { 
     if(response.status == "invalid") 
     { 
      $('#invalid').modal("show"); 
      $('#usernameSearch').modal("hide"); 
     } 
    }); 
}); 
+1

Вы пытались переместить функцию обратного вызова, которая будет выполнена на события XHR? [Ссылка здесь] (http://datatables.net/reference/api/ajax). Тогда вы можете проверить, что вернется первым – elzi

+0

Спасибо за ваш ответ! Нет, я не пробовал, я посмотрю на ссылку как можно скорее. – user1157751

+0

@elzi Спасибо! xhr работает отлично! – user1157751

ответ

1
$('#example').dataTable(); 

$('#example').on('xhr.dt', function() { 
    console.log('Ajax call finished'); 
}); 
+0

Пожалуйста, добавьте несколько пояснений к вашему коду. – kenorb

Смежные вопросы