2011-01-30 6 views
5

Creo que estoy perdiendo algo:echo'd PHP encode JSON llamado a través de AJAX devuelve exactamente lo que?

uso de AJAX consigo algunos datos de una base de datos y lo envía de nuevo en formato JSON $ jsondata = array();

while ($Row = mysql_fetch_array($params)) 
{ 

    $jsondata[]= array('cat_id'=>$Row["cat_id"], 
          'category'=>$Row["category"], 
        'category_desc'=>$Row["category_desc"], 
        'cat_bgd_col'=>$Row["cat_bgd_col"]); 
}; 

echo("{\"Categories\": ".json_encode($jsondata)."};"); 

No hay problema hasta ahora, creo.

En el lado cleint recibo de vuelta lo anterior en

ajaxRequest.responseText 

y si hago esto

var categoriesObject = ajaxRequest.responseText; 
alert(categoriesObject); 

veo lo que espero ver es decir, toda la matriz en la alerta.

Donde todo va mal es tratar de acceder a la respuesta. El error que recibo es que el "categoriesObject" no es un objeto, si no, ¿qué es? lo que me molesta es que ni siquiera puedo acceder de esta manera:

document.write(categoriesObject.Categories[0].category); 

¿Qué estoy haciendo mal?

+1

Necesita analizar la cadena en un objeto. Utilizando eval() que es problemático o usando un analizador JSON. Vea aquí: http://www.json.org/js.html Nota al margen, marcos como jQuery tienen esto incorporado en –

Respuesta

11
  1. No debe crear JSON manualmente. Uso:

    echo json_encode(array('Categories' => $jsondata)); 
    

    o simplemente

    echo json_encode($jsondata); 
    

    no veo una razón para agregar Categories.

  2. Usted tiene que decodificar el JSON en el cliente, utilizando JSON.parse (disponible en la mayoría de los navegadores, pero también está disponible como script):

    var data = JSON.parse(ajaxRequest.responseText); 
    
  3. Si quieres ser muy correcto, agrega

    header('Content-type: application/json'); 
    

    a su script PHP.

+0

Muy agradable, cubriendo todos los aspectos. +1 –

+0

La razón por la que utilicé Categorías es que, en última instancia, tendré varias matrices en los datos. Además, no proporcioné el php completo, ¡pero solo para obtener información estás en lo cierto! Estaba usando el encabezado ("Content-type: text/javascript"); no es que realmente afecte los datos por lo que puedo ver. – T9b

2

¿Está analizando de forma efectiva el JSON? No funcionará sin.

var categoriesObject = JSON.parse(ajaxRequest.responseText); 
+0

Gracias, igual que la respuesta anterior, pero no puedo seleccionar ambas, ¡lo siento! – T9b

+0

No hay problema, Félix claramente dio la mejor respuesta. – svens

Cuestiones relacionadas