DataTables在本地工作,托管时会出现404和Ajax错误

时间:2018-07-23 13:19:34

标签: jquery laravel iis datatables

我有一个带有单个数据表的简单Laravel应用程序,该数据表在服务器端处理数据并将其提供给页面。它使用一个软件包yajra/laravel-datatables。在本地测试时效果很好(php artisan服务),但是在托管应用程序时,页面加载时出现错误:

  

DataTables警告:表ID =程序表-Ajax错误。有关此错误的更多信息,请参阅http://datatables.net/tn/7

,我的请求在开发工具中返回404。我认为这个问题会在路由中产生,因为服务器托管在IIS中,并且具有多个重写规则-尽管禁用它们并没有任何效果。

我的Laravel路线如下:

Route::get('/serverSide', [
  'as'   => 'serverSide',
  'uses' => function () {
    $model = \App\Degree::query();
    return DataTables::eloquent($model)->toJson();
  }
]);

我的DataTable设置是:

    $('#program-table').DataTable({
  processing: true,
  serverSide: true,
  ajax: "{{ route('serverSide') }}",
  columns: [
      {
        "className":      'details-control',
        "orderable":      false,
        "data":           null,
        "width":          '5%',
        "searchable":     false,
        "defaultContent": ''
      },
      { data: 'cip', width: '10%'},
      { data: 'cip_title' },
      { data: 'item_name' },
      { data: 'degree_name_list' },
      { data: 't_state_code_list', width: '7%' },
      { data: 'p_state_code_list', width: '7%' },
      { data: 's_state_code_list', width: '7%' }
  ],
  pageLength: 25,
  searching: true,
  paging: true,
  "order": [[ 1, "asc" ]]
});

如果有人对类似问题或解决方案有任何经验,我很高兴知道!非常感谢

2 个答案:

答案 0 :(得分:0)

对于IIS,URL可能太长(IIS在URL长度上有字节限制)。如果您在网站的IIS日志中查找,则应该看到该请求的404.15或404.14。

如果在浏览器的DEV工具中打开“网络”标签,则在打开数据表时检查GET请求的长度。

IIS的默认限制是4kb IIRC。计算出您需要的长度。我的限制是10KB,10240字节。

在IIS中:

  1. 转到您的网站:
  2. 打开请求过滤->编辑功能设置(右侧窗格中的菜单)。
  3. 将“最大URL长度”和“最大查询字符串”更改为所需值(最小值为10240)。
  4. 重新启动站点。

答案 1 :(得分:0)

我有同样的问题。通过使用“发布”而不是“获取”发出请求已解决了该问题。您可以使用以下代码进行发布请求。

$('#users-table').DataTable({
        processing: true,
        serverSide: true,
        ajax: {
            url: 'http://datatables.yajrabox.com/eloquent/column-search-data',
            method: 'POST'
        }
});

来源:https://github.com/yajra/laravel-datatables/issues/74#issuecomment-111974122