2016-05-11 13 views
2

Alles funktioniert auf folgende Code feinen Benutzer anmeldet holen:Laravel Datentabelle ungültig JSON Antwort

js:

<script> 
$(document).ready(function() { 
    var table =$('#systemLogs').DataTable({ 
     responsive: true, 
     processing: true, 
     serverSide: true, 
     "language": { 
      "url": "/datatables/media/plug-in/Persian.json" 
     }, 
     ajax: '{!! url('/admin/systemLogs/data/systemLogsDataTable') !!}', 
     columns: [ 
      { data: 'name', name: 'name' }, 
      { data: 'message_text', name: 'message_text' }, 
      { data: 'remote_addr', name: 'remote_addr' }, 
      { data: 'log_created_at', name: 'management_logs.created_at' }, 
      { data: 'log_updated_at', name: 'management_logs.updated_at' }, 
     ] 
    }); 
}); 
</script> 

Routen:

Route::get('/systemLogs/data/systemLogsDataTable','[email protected]'); 

public function systemLogsDataTable() 
{ 
    $logs= ManagementLog::select('management_logs.message_text','management_logs.remote_addr','management_logs.created_at as log_created_at','management_logs.updated_at as log_updated_at','managements.name')->leftJoin('managements','management_logs.management_id','=','managements.id'); 
    return Datatables::of($logs)->make(true); 
} 

Es funktioniert gut für mich, aber wenn ich will um nur 2 Felder aus der Datenbank zu holen, gibt es mir

DataTables-Warnung: Tabellen-ID = systemLogs - ungültige JSON-Antwort.

aber manchmal wird es in Ordnung funktionieren.

<script> 
$(document).ready(function() { 
    var table =$('#systemLogs').DataTable({ 
     responsive: true, 
     processing: true, 
     serverSide: true, 
     "language": { 
      "url": "/datatables/media/plug-in/Persian.json" 
     }, 
     ajax: '{!! url('/admin/systemLogs/data/systemLogsDataTable') !!}', 
     columns: [ 
      { data: 'name', name: 'name' }, 
      { data: 'message_text', name: 'message_text' }, 
     ] 
    }); 
}); 
</script> 

ich verstanden habe, was das Problem von Middleware ist:

public function handle($request, Closure $next,$guard = 'admin') 
{ 
    if(!Auth::guard($guard)->check()){ 
     return redirect('/administrator/logout'); 
    }else{ 
     return $next($request); 
    } 
} 

wenn ich änderte es an:

public function handle($request, Closure $next,$guard = 'admin') 
{ 
    return $next($request); 
} 

Es funktioniert gut, so bedeutet es das Problem von AJAX ist. was muss ich tun?

Antwort

0

Es weil ist, wenn Sie nicht in Anwendung angemeldet sind die Antwort würde eine Umleitung sein wird, und dies ist eine ungültige Antwort AJAX, können Sie versuchen, diese zu handhaben Antwort umleiten:

$(document).ready(function() { 
    var table =$('#systemLogs').DataTable({ 
     responsive: true, 
     processing: true, 
     serverSide: true, 
     "language": { 
      "url": "/datatables/media/plug-in/Persian.json" 
     }, 
     ajax: function(data, callback, settings) { 
      // make a regular ajax request 
      $.get('{!! url('/admin/systemLogs/data/systemLogsDataTable') !!}', function(res) { 
       if(res.redirect) 
        window.location.href = res.redirect; 

       callback({ 
        data: JSON.parse(res) 
       }); 
      }); 
     }, 
     columns: [ 
      { data: 'name', name: 'name' }, 
      { data: 'message_text', name: 'message_text' }, 
      { data: 'remote_addr', name: 'remote_addr' }, 
      { data: 'log_created_at', name: 'management_logs.created_at' }, 
      { data: 'log_updated_at', name: 'management_logs.updated_at' }, 
     ] 
    }); 
}); 
+0

Nein ich muss mich einloggen, um diese Seite zu sehen. Ich sagte, wenn die Anzahl der ausgewählten Felder mehr als 3 ist, gibt es keinen Fehler oder wenn ich falsche Server Seite mache, dann gibt es keinen Fehler wieder. Danke –

+0

Was meinst du mit make false serverseite? @ehsankhodayar –

+0

Wenn Sie serverside true setzen, wird es Daten jedes Mal vom Server zum Beispiel auf der Suche oder auf Seitenumbruch und dem anderen holen, aber wenn Sie es falsch setzen, wird es alle Daten von der Datenbank beim ersten Mal dann die anderen Dinge wie Suche fechten oder Seitenumbruch und der andere ist nicht Serverver Seite und es ist Client-Seite. –

0

Zuerst werden Sie mit php Handwerker servieren? Ich denke ja, also schlage ich vor, dass Sie Homestead/Valet oder irgendeinen Apache/Nginx-Stack verwenden.

Es war ein bekannter seltsamer Bug des Pakets, bei dem Laravel bei der Verwendung von artisan serve zufällig die redirect/404-Antwort zurückgibt.

- Bearbeiten -

die Paketdokumentation aktualisiert und die bekannten Fehler beraten. https://github.com/yajra/laravel-datatables#php-artisan-serve-bug