2015-05-12 2 views
1

У меня есть таблица mysql с примерно 30000 строками. Я должен поместить все строки в DataTable и загружать каждый сегмент каждый раз, когда загружается страница таблицы (когда вы нажимаете на разбиение на страницы). Я видел, что я могу использовать параметр deferLoading в моем JS, но когда я его использую, мои страницы не загружаются. Как вы можете видеть, что я должен загружать изображения, так что я абсолютно необходимо сделать легкую загрузку контента ...DataTables: DeferLoading работает неправильно

Вот мой HTML:

<table class="table table-striped table-bordered table-hover datatable products-datatable"> 
    <thead> 
     <tr> 
      <th></th> 
      <th><?=_("Product")?></th> 
      <th></th> 
     </tr> 
    </thead> 
    <tfoot> 
     <tr> 
      <th></th> 
      <th><?=_("Product")?></th> 
      <th></th> 
     </tr> 
    </tfoot> 
</table> 

Вот мои JS:

var table = $('.products-datatable').dataTable({ 
    "order": [[ 1, "asc" ]], 
    "processing": true, 
    "serverSide": true, 
    "deferLoading": 30000, 
    "ajax": { 
     url: location.protocol + '//' + location.hostname + '/ajax/products.php?action=list', 
     type: "POST" 
    }, 
    "columns": [ 
     { "data": "image", 
      "orderable": false, 
      "width": "80px" }, 
     { "data": "product" }, 
     { "data": "action", 
      "orderable": false, 
      "width": "20px", 
      "sClass": "class", 
     } 
    ] 
}); 

Вот мой AJAX:

$req = $pdo->prepare('SELECT product_id, name FROM products'); 

if ($req->execute()) { 

    if ($req->rowCount()) { 

     $result['draw'] = 1; 
     $result['recordsTotal'] = $req->rowCount(); 
     $result['recordsFiltered'] = 10; 
     $result['data'] = array(); 
     $result['DT_RowId'][] = array(); 

     while($row = $req->fetch()) { 

      if ($row['name']) { $name = $row['name']; } else { $name = "N/A"; } 

      $result['data'][] = array( "DT_RowId"  => $row['product_id'], 
             "DT_RowClass" => 'myclass', 
             "image"   => '<a href="' . HOSTNAME._("product").'/'.$row['product_id'] . '"><img src="' . HOSTNAME.'assets/img/products/' . $row['product_id'] . '.jpg" class="product_thumb"></a>', 
             "product"  => '<a href="' . HOSTNAME._("product").'/'.$row['product_id'] . '">' . $name . '</a>', 
             "action"  => "<a href=\"#\" class=\"button-delete\" id=\"" . $row['product_id'] . "\"><i class=\"fa fa-close fa-2x text-danger\"></i></a>" 
             ); 

     } 

    } 

} 

$req->closeCursor(); 

Я уверен, что есть что-то я пропустил ... :-(

ответ

0

Я считаю, что вам не нужно использовать deferLoading, чтобы воспользоваться обработкой на стороне сервера.

Ваш текущий скрипт просто возвращает все записи и не выполняет сортировку или фильтрацию. Вам необходимо использовать ssp.class.php (доступно в дистрибутиве DataTables) или emran/ssp, чтобы правильно обрабатывать запросы AJAX на сервере.

Библиотека DataTables отправит start и length параметры в запросе AJAX, указывающие, какая часть данных необходима, и ваш класс обработки на стороне сервера будет правильно обрабатывать его для вас.

Для получения дополнительной информации см. Пример server-side processing.

+0

спасибо! –

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