2017-04-07 3 views
0

Ich verwende Slickgrid mit Dataview, um Tabellen mit bis zu 5000 Zeilen zu bearbeiten, die Daten aus einer MySQL-Datenbank mit Laravel erhalten. Ich habe ein AJAX-Save-Funktion erstellt, die alle Daten in der Datenbank gespeichert, aber das läuft extrem langsam und friert das Raster für einige Sekunden:Sync Datenansicht mit Datenbank

function TestSave() { 

    var request; 
    var token = $('meta[name="csrf-token"]').attr('content'); 

    request = $.ajax({ 
     url: "/est/public/estimate/{{ $id }}", 
     type: "PATCH", 
     dataType: "json", 
     params: {_token:token}, 
     async: true, 
     data: { data: JSON.stringify(dataView.getItems()), _token:token 
     } 
    }); 

} 

Gibt es eine Möglichkeit, die Daten zu speichern, ohne sie einfrieren? Ich dachte daran, grid.onClick oder onBeforeEditCell zu verwenden und jede Zeile einzeln zu speichern, wenn sie sich ändert, aber Funktionen wie das Einfügen einer Zeile ändern den "Order" -Wert in jeder Zeile unterhalb der Einfügung.

Was ist der beste Weg, um die Datenansicht und die Datenbank synchron zu halten?

Antwort

0

Dies ist ein komplexes Problem.
Erstens sollte der Ajax-Aufruf asynchron sein, also sollte er für 5 Sekunden nicht blockieren.
Wenn Sie jedoch alle 5000 Zeilen an den Server übergeben, könnte die JSON-Codierung eine Weile dauern. Am besten geben Sie nur geänderte Zeilen an den Server weiter. Allerdings ist das an sich viel komplexer, als es zunächst scheint.

Sie verwenden möglicherweise ein vorhandenes Framework, um die Daten für Sie zu verarbeiten. Breeze ist eine gute Wahl.

Verwandte Themen