EXTJS JsonStore no carga

Sé que esto será una repetición. Pero he hecho todo lo posible para resolverlo, todo en vano. ¡No puedo completar ni siquiera un panel de cuadrícula simple! Obviamente soy un novato en extjs.

Mi código js es el siguiente:

Ext.onReady(function(){
    var store = new Ext.data.JsonStore({        
        url: 'compare.php',             
                fields: ['name', 'area']
               });      

    store.load();
    var grid = new Ext.grid.GridPanel({
        store: store,
        columns: [
        {header: 'Name', width: 100, sortable: true, dataIndex: 'name'},
        {header: 'Position', width: 100, sortable: true, dataIndex: 'area'}          
        ],
        stripeRows: true,
        height:250,
        width:500,
        title:'DB Grid'
    });
    grid.render('db-grid');

});

y mi php es el siguiente:

<html>
<head>
</head>
 <body bgcolor="white">
  <?php
  $link = pg_Connect('host=my_host port=5432 dbname=da_name user=postgres password=my_password');
  $sql = "SELECT name, area FROM \"TABLE\" LIMIT 10";
    if (!$link) {
        echo "error";
    } else {
    $result = pg_query($link, $sql);
    $rows = array();
    $totaldata = pg_num_rows($result);
    while($r = pg_fetch_assoc($result)) {
        $rows[] = $r;
    }
    //echo json_encode($rows);
    //echo json_encode(array('country' => $rows));
    echo '({"total":"'.$totaldata.'","country":'.json_encode($rows).'})';
    }
  ?>
  </body>
</html>

Y mi json es el siguiente:

[
    {
        "total": "10",
        "country": [
            {
                "name": "CULTIV",
                "area": "1.10584619505971e-006"
            },
            {
                "name": "CULTIV",
                "area": "2.87818068045453e-006"
            },
            {
                "name": "CULTIV",
                "area": "6.96120082466223e-007"
            },
            {
                "name": "CULTIV",
                "area": "1.17171452984621e-007"
            },
            {
                "name": "CULTIV",
                "area": "1.25584028864978e-006"
            },
            {
                "name": "CULTIV",
                "area": "5.86309965910914e-007"
            },
            {
                "name": "CULTIV",
                "area": "4.12220742873615e-007"
            },
            {
                "name": "CULTIV",
                "area": "7.59690840368421e-006"
            },
            {
                "name": "CULTIV",
                "area": "2.47360731009394e-007"
            },
            {
                "name": "CULTIV",
                "area": "4.04940848284241e-005"
            }
        ]

¿Necesito configurar algún proxy para esto? En realidad, mi aplicación se ejecuta en un servidor diferente al de mi base de datos.

preguntado el 12 de junio de 12 a las 16:06

2 Respuestas

No tengo experiencia en PostgreSQL pero te aconsejo que uses pg_fetch_object() función en lugar de pg_fetch_assoc() en ese caso.

Intente algo como esto:

while($obj = $result->pg_fetch_object()) {
$rows = $obj;
}    
echo '({"total":"'.$totaldata.'","country":'.json_encode($rows).'})';

Respondido 18 ago 12, 11:08

Su JSON está mal formado. Ext.data.JsonReader (configurado automáticamente cuando usa un JsonStore) espera un objeto JSON con un root nodo, definido en la configuración de su lector. El lector debe lanzar una excepción si el root es indefinido

Así que define una raíz para tu JsonReader:

var store = new Ext.data.JsonStore({        
    url: 'compare.php',
    root: 'country', // required!
    fields: ['name', 'area']
});

Y tu JSON debería verse así:

{
    "total": 10,
    "country": [{
        "name": "CULTIV",
        "area": "6.96120082466223e-007"
    },{
        ...
    }]
}

Respondido 22 ago 12, 01:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.