2015-07-23 6 views
3

Я использую jQuery DataTables, ajax и Bootstrap в небольшом проекте. Он работает в основном, и я тестирую состояния ошибок. Я установил свой html для таблицы DataTables. Существует table-responsive div, окружающий <table>.jQuery, DataTables, обработка ошибок ajax: избавиться от сообщения «Обработка»

<div id="errorDiv"></div> 
    <div id="resultTableDiv" class="table-responsive"> 
     <table id="resultTable" class="table table-striped table-bordered table-hover table-condensed" cellspacing="0"> 
      <thead> 
      <tr> 
       <th>...</th> 
       ... 
      </tr> 
      </thead> 
      <tfoot> 
      <tr> 
       <th>...</th> 
       ... 
      </tr> 
      </tfoot> 
     </table> 
    </div> 
</div> 

В DataTables инициализации I настройки на основе AJAX вызова и указать функцию обратного вызова error. Это «работает» в том, что я могу заставить ошибку на сервере ajax на стороне сервера, и обратный вызов уволен. Я могу обработать возвращенную ошибку, как я хочу.

Моя проблема заключается в том, что при запуске вызова ajax тело таблицы «заменяется» сообщением Processing. Это прекрасно, за исключением того, что когда ajax сообщает об ошибке с помощью обратного вызова, сообщение обработки все еще существует, и мне еще предстоит выяснить, как заставить его уйти с помощью методов DataTables или вызовов API.

моя ошибка обратного вызова выглядит

function ajaxError(jqXHR, textStatus, errorThrown) { 
    var obj = jQuery.parseJSON(jqXHR.responseText); 
    if (obj && obj.Error) { 
     $('#errorDiv').html("<p>" + obj.Error + "</p>"); 
    } 
} 

У меня есть «глобальный» переменной, которая содержит определение DataTables таблицы. Он находится в состоянии готовности функции JQuery

var table; 
$(function() { 
    $('#errorDiv').empty(); 
    $('#resultTable').show(); 

    table = $('#resultTable').DataTable({ 
     paging: false, 
     processing: true, 
     autoWidth: false, 
     ordering: false, 
     ajax: { 
      url: "ions.cgi", 
      dataType: 'json', 
      dataSrc: "LIST", 
      error: ajaxError 
     }, ... 

В обратном вызове ошибки я попытался все следующее:

table.clear().draw(); // does nothing 
table.fnRedraw();  // says that function does not exist 

В этом состоянии ошибки как следует Processing сообщения сбросить?

ответ

8

Элемент, который показывает сообщение обработки получает идентификатор <idOfTable>_processing, чтобы вы могли скрыть его с помощью:

$('#resultTable_processing').hide(); 

Это может измениться, и идентификатор может быть различным, но концепция стоит, вы можете просто узнать, как идентифицировать элемент и скрыть его. DataTables покажет его снова, если это необходимо.

Кроме того, вы хотите, чтобы сообщение обработки отображалось в других случаях? Потому что вы можете просто сделать его никогда не появляться, используя processing: false в параметрах DataTable (или просто не устанавливая его вообще, так как это поведение по умолчанию не показывает его).

+0

Хм, я предположил, что будет вызов API, который мне не хватало. Я вижу именованный обработчик div, но сокрытие кажется немного взломанным. Я не говорю, что это не тот ответ, что он чувствует себя неэлегантным, когда есть все другие функциональные возможности API. Тем не менее, он работает и благодарит вас –

+0

Немного хакерский, но [альтернативный] (https://www.datatables.net/plug-ins/api/fnProcessingIndicator) не дает никакой пользы и является плагином. [Здесь] (http://datatables.net/forums/discussion/7325/processing-notice-and-ajax-error-handling) вы можете прочитать объяснение, почему оно остается открытым. – vcanales

+0

Работает в DataTables 1.10.11. Идентификатор элемента по-прежнему состоит из '[table-name] _processing' –

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