2011-08-11 39 views
7

He intentado que DataTables funcione con mi función de búsqueda Ajax existente, que funciona sola.DataTables con JSON, AJAX y PHP sin mostrar ningún dato

tengo el siguiente código:

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

      } 
     }); 

El PHP devuelve un objeto JSON válida (utilizando 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"} 

puedo ver todo esto muy bien en FireBug, pero mi mesa vacía no se está rellenando con estos datos.

¿Alguna idea?

@Kyle: Errr - eso es todo. ¿Supongo que no tengo uno? Este es mi primer intento (forcejeo) con DataTables y solo estoy copiando de la documentación: http://www.datatables.net/usage/callbacks#fnServerData

@MarcB: Agregué eso - pero todavía no se muestran datos. Gracias por la ayuda

+0

¿Le añadir su fnCallback funcionar su mensaje, por favor? – Kyle

+0

'success: function (data) {fnCallback (data); } 'para pasar explícitamente los datos devueltos? –

+0

¿Puede mostrarnos el código fuente de PHP que devuelve el resultado? Porque creo que no dio el formato adecuado solicitado aquí http://www.datatables.net/usage/server-side –

Respuesta

0

Este complemento espera que el objeto JSON devuelto sea un objeto, con una propiedad que es una matriz de matrices. Esta propiedad se debe llamar 'aaData'. No estás devolviendo un objeto; solo estás devolviendo la matriz.

0

Estaba teniendo un problema similar. Resulta que no estaba formando la respuesta JSON correctamente. Esto funcionó para mí:

<?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

puede eliminar la pieza $ .ajax, en su lugar puede usar el método $ .getJSON.

0

También puede agregar lo siguiente para evitar la adición de un objeto extra como "aaData":

"sAjaxDataProp": '' 
0

¿Qué estás configurando sEcho a?

Su JSON debe tener la siguiente estructura:

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