2011-08-11 52 views
7

我一直在試圖讓DataTables與我現有的Ajax搜索功能一起工作 - 它本身起作用。帶有JSON,AJAX和PHP的DataTables不顯示任何數據

我有以下代碼:

 $('#SearchResults').dataTable({ 
      "bProcessing": true, 
      "bServerSide": true, 
      "bRetrieve": true, 
      "sAjaxSource": "process.php?action=searchArtifact", 
      "fnServerData": function (sSource, aoData, fnCallback){ 
       aoData.push({ 
        "name": "searchName", 
        "value": $('#ArtifactSearch').attr('value') 
       }); 
       $.ajax({ 
        "dataType": "json", 
        "type": "POST", 
        "url": sSource, 
        "data": aoData, 
        "success": fnCallback 
       }); 

      } 
     }); 

的PHP函數返回一個有效的JSON對象(使用JSON_FORCE_OBJECT):

{"0":{"ARTIFACT_ID":"4E2FE3BCE356C","ARTIFACT_NAME":"123","ARTIFACT_TYPE":"UI","ARTIFACT_LABEL":"Test_Int_EAS_123","ARTIFACT_LOCATION":"Int","ARTIFACT_DOMAIN":"ABC","ARTIFACT_AUTHOR":null,"REGISTERED_EMAIL":"[email protected]","REGISTERED_DATE":"27-07-2011","REGISTERED_TIME":"11:09:00"} 

我可以看到這個在Firebug都很好,但我的空表沒有被填入這個數據。

任何想法?

@Kyle:Errr--就是這樣。我想我沒有?這是我第一次嘗試(掙扎)與DataTables,我只是從文檔複製:http://www.datatables.net/usage/callbacks#fnServerData

@MarcB:補充說 - 但仍然沒有數據顯示。感謝您的幫助

+0

你添加fnCallback功能您的文章嗎? – Kyle

+0

'success:function(data){fnCallback(data); }'顯式傳遞返回的數據? –

+0

你能告訴我們返回結果的PHP源代碼嗎?因爲我認爲它沒有給出這裏要求的正確格式http://www.datatables.net/usage/server-side –

回答

0

這個插件期望返回的JSON對象是一個對象,其屬性是一個數組數組。這個屬性應該被稱爲'aaData'。你沒有返回一個對象;你只是返回數組。

0

我有類似的問題。原來,我沒有正確地形成JSON響應。這爲我工作:

<?php 

$arr = array ('aaData' => array(
array('3','35','4', '$14,500', '$15,200','$16,900','5','1'), 
array('1','16','4', '$14,200', '$15,100','$14,900','Running','1'), 
array('5','25','4', '$14,500', '$15,600','$16,900','Not Running','1') 
) 
); 

echo json_encode($arr); 
?> 
0

您可以刪除$ .ajax部分,而是可以使用$ .getJSON方法。

0

您還可以添加以下,以避免增加額外的對象,如「aaData」:

"sAjaxDataProp": '' 
0

你在設置sEcho什麼?

你的JSON應該有這樣的結構:

{ 
    "sEcho": 'refer to "sEcho" in $_GET or $_POST; don't forget to sanitize', 
    "iTotalRecords": 'for pagination', 
    "iTotalDisplayRecords": 'number displayed', 
    "aaData" => { /* your data here */ } 
}