2014-02-11 24 views
7

我正在嘗試在我的項目中使用Datatables。我想了解使用「fnServerData」回調選項。我已經通過DOC Here走了,看到下面的代碼示例 -瞭解數據表中的fnServerData

$(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 
     }); 
    } 
    }); 
}); 

什麼是「sSource」,這裏的「aoData」參數,我們如何提供在它的值? 另外,我們是否可以提交一個能夠動態獲取JSON數據的表單,而不是將JSP或PHP作爲源代碼(sAjaxSource)?

回答

22

fnServerData是dataTables中的一個內部函數,可以使用您自己的ajax處理函數進行過濾。在這種情況下,使用舒適的jQuery功能Read more here

參數在dataTables核心中定義,並且在此特定順序中是必需的。

sSource是數據源所在的URL。它被初始化爲sAjaxSource中的值。在這種情況下,xhr.php

aoData是一個將被髮送到數據源的參數數組。它包含默認情況下paginationinfo,sortinginfo,filterinfo等(它們是由核心自動設置的),dataSource腳本應該對其作出反應。 (例如:將sql查詢限制爲頁面大小等)要向您的請求發送更多信息,您可以將其他值推送到aoData。像這樣:

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

(會獲得通過jQuery從 形式命名data1和data2的兩個輸入字段的值,並將其包含在POST作爲輸入1和輸入2)

如果您想要知道發送的內容,可以使用Firebugs控制檯查看POST Data,或者可以將類型更改爲GET。然後你會看到地址欄中傳遞的參數(注意,這可能是一個非常長的字符串,可能會被截斷)。

fnCallback也是可以被覆蓋的核心的內置函數,但不是在這種情況下。你應該提供你自己的功能,以防你收到數據後想在JS中做一些後處理。

關於您的問題的第二部分:當然,您不需要使用PHP或JSP。任何可以動態提供JSON數據的服務器端語言都可以(Phyton,Node,您將其命名爲...)

+1

如果您使用的是ASP.NET MVC,並且您的控制器操作具有jQueryDataTableParamModel類型的參數,請考慮您需要創建一個子類(從jQueryDataTableParamModel擴展的類),併爲從客戶端發送到服務器的每個額外字段添加一個屬性。在這種情況下,您應該添加兩個屬性:Input1和Input2。這樣,ASP.NET MVC將自動綁定這些值。 –

+0

感謝您的信息。可惜我對ASP.NET MVC瞭解不多:-(但我相信這很有幫助! – mainguy

+0

很好的解釋。謝謝 – Richie