2012-01-25 14 views
5

Parece que tengo problemas para obtener datos de una matriz php, he visto varios ejemplos de cómo hacerlo, pero me falta algo porque no puedo hacer que mi código funcione .Lectura de una matriz PHP en JQuery

método PHP

function getLatestActivity(){ 
    $messages = array( 
     array('id'=>'01', 'value'=>'blah'), 
     array('id'=>'02', 'value'=>'Oil'), 
     array('id'=>'03', 'value'=>'Spark') 
    ); 

    echo json_encode($messages); 
    return; 
} 

AJAX llegar Functiom

function getLatestActivities(){ 
    $.ajax({ 
     type: "GET", url: "include/process.php", 
     data:{ 
     getLatestActivity: "true", 
     toUser: "4", 
     ignoreMessages:"1", 
     dataType: "json" 
     }, 
     success: function(data){ 
     $.each(data, function (i, elem) { 
      alert(data.id); 
     });    
     } 
    }); 
} 

la alerta imprime el mensaje "indefinido", cualquier ayuda será apreciada gracias.

Respuesta

6

Pruebe con - es su único objeto ahora:

alert(elem.id); 
+0

extraño pero todavía no funcionó. –

+0

Verificar, qué hay en 'data' antes de' $ .each() '. – hsz

+0

si escribo "alerta (datos);" en lugar de $ .each() obtengo [{"id": "01", "value": "blah"}, {"id": "02", "value": "Oil"}, { "id": "03", "valor": "Spark"}] –

0

creo que tipo de datos no debe ser parte del objeto de datos que más bien debe ser hermano de éxito (opciones). Creo que no está recibiendo los datos como JSON objeto en vez de cadena sólo debido a que

2

Es muy probable que los datos no es lo que estás esperando. No está configurando ningún encabezado en su respuesta, y como lo insinúa @Sudesh dataType no está en el lugar correcto. El resultado es que los datos probablemente sean una cadena porque jquery no los analizará como json.

También se está refiriendo a la variable incorrecta. data.id no puede existir con los datos que está devolviendo de php. necesitaría elem.id o si prefiere data[i].id si los datos contienen lo que está esperando. Como un lado, usar $ .each en lugar de un ciclo for es relativamente ineficiente.

Puede comprobar si ese es el caso con el código como:

function getLatestActivities(){ 
    $.ajax({ 
     type: "GET", url: "include/process.php", 
     data:{ 
     getLatestActivity: "true", 
     toUser: "4", 
     ignoreMessages:"1", 
     dataType: "json" 
     }, 
     success: function(data){ 
     console.log(data); // <- look at the response 
     $.each(data, function (i, elem) { 
      // alert(data.id); don't debug using alerts 
      console.log(elem); 
     });    
     } 
    }); 
} 

Si los datos es una cadena (o, simplemente, no lo que está esperando) esto debe llegar más cerca:

function getLatestActivity(){ 
    .... 
    header('Content-type: application/json'); 
    echo json_encode($messages); 
} 

con

function getLatestActivities(){ 
    $.ajax({ 
     url: "include/process.php", 
     data:{ 
     getLatestActivity: true, 
     toUser: 4, 
     ignoreMessages:1, 
     }, 
     success: function(data){ 
     console.log(data);   
     ...    
     } 
    }); 
} 

data debería al menos ser entonces una matriz.