2014-02-11 3 views
7

Ich versuche, Datatables in meinem Projekt zu verwenden. Ich möchte die Verwendung der Rückrufoption "fnServerData" verstehen. Ich habe durch die doc Here gegangen und haben folgende Beispielcode gesehen -Understanding fnServerData in Datatables

$(document).ready(function() { 
    $('#example').dataTable({ 
    "bProcessing": true, 
    "bServerSide": true, 
    "sAjaxSource": "xhr.php", 
    "fnServerData": function (sSource, aoData, fnCallback, oSettings) { 
     oSettings.jqXHR = $.ajax({ 
     "dataType": 'json', 
     "type": "POST", 
     "url": sSource, 
     "data": aoData, 
     "success": fnCallback 
     }); 
    } 
    }); 
}); 

Was ist „sSource“, „aoData“ Parameter hier und wie wir liefern Werte in ihm? Können wir anstelle einer JSP oder PHP als Quelle (sAjaxSource) auch ein Formular senden, mit dem JSON-Daten dynamisch abgerufen werden?

Antwort

22

fnServerData ist eine interne Funktion in DataTables, die mit Ihrem eigenen Ajax-Handler überschrieben werden kann. In diesem Fall mit einer komfortablen jQuery-Funktion Read more here

Die Parameter sind in DataTables Kern definiert und sind in dieser bestimmten Reihenfolge erforderlich.

sSource ist die URL, unter der sich Ihre Datenquelle befindet. Es wird auf initialization auf den Wert in sAjaxSource festgelegt. In diesem Fall xhr.php

aoData ist ein Array von Parametern, die an die Datenquelle gesendet werden. Dieser enthält standardmäßig paginationinfo, sortinginfo, filterinfo usw. (die automatisch vom Kern gesetzt werden), auf die Ihr dataSource-Skript reagieren soll. (Beispiel: Begrenzen Sie eine SQL-Abfrage auf Seitengröße usw.) Um weitere Informationen an Ihre Anfrage zu senden, können Sie andere Werte auf aoData schieben. Wie so:

"fnServerData": function (sSource, aoData, fnCallback, oSettings) { 
       aoData.push({ "name": "Input1", "value": $("#data1").val() }); 
       aoData.push({ "name": "Input2", "value": $("#data2").val() }); 
    oSettings.jqXHR = $.ajax({ 

(Werden die Werte von zwei Eingabefelder erhalten namens data1 und Daten2 über jQuery von einer Form und sie in der POST als Input1 und Input2)

Wenn Sie Möchten Sie wissen, was gesendet wird, können Sie die POST-Daten mit der Firebugs-Konsole anzeigen oder den Typ in GET ändern. Dann sehen Sie die übergebenen Parameter in der Adressleiste (Achtung, dies kann eine sehr lange Zeichenfolge sein, die abgeschnitten werden könnte).

fnCallback ist auch eine eingebaute Funktion des Kerns, die überschrieben werden können, ist aber nicht in diesem Fall. Sie sollten eine eigene Funktion bereitstellen, wenn Sie nach dem Empfang der Daten eine Nachbearbeitung in JS durchführen möchten.

In Bezug auf den zweiten Teil Ihrer Frage: Natürlich müssen Sie nicht PHP oder JSP verwenden. Jede serverseitige Sprache, die JSON-Daten dynamisch bereitstellen kann, ist in Ordnung (Phyton, Node, Sie nennen sie ...)

+1

Wenn Sie ASP.NET MVC verwenden und Ihre Controller-Aktion einen Parameter vom Typ jQueryDataTableParamModel hat, berücksichtigen Sie Sie müssen eine untergeordnete Klasse (eine Klasse, die sich von jQueryDataTableParamModel erstreckt) erstellen und eine Eigenschaft für jedes zusätzliche Feld hinzufügen, das Sie vom Client an den Server senden. In diesem Fall sollten Sie zwei Eigenschaften hinzufügen: Input1 und Input2. Auf diese Weise wird ASP.NET MVC die Werte automatisch binden. –

+0

Danke für die Info. Leider weiß ich nicht viel über ASP.NET MVC :-(Aber ich bin mir sicher, dass dies hilfreich ist! – mainguy

+0

großartige Erklärung. Danke – Richie