• Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)
  • Cuixer, una forma de administrar páginas web que nunca viste!

 Tema solucionado [R] Problema con el ejemplo de combobox livesearch

Foros generales de ayuda Ext 2.0.
Avatar de Usuario
Ext.foro.Moderador
Mensajes: 16
Registrado: 01 Dic 2008, 18:59
NotaPublicado: 05 Feb 2009, 09:09
Hola amigos, estoy teniendo un problema con el siguiente codigo que es adaptado del ejemplo "Combobox template and ajax" http://extjs.com/examples/form/forum-search.html

Por ejemplo, si consulto por el nombre "perez", la consulta al script php la efectua, devuelve lo siguiente:

({ totalCount: "2", results: [{"doc":"12345678","apellido":"Perez","nombre":"Juan","domicilio":"Caucete"},{"doc":"34567","apellido":"Perez","nombre":"Alberto","domicilio":"Ruta 20"}]})

El combo despliega el mensaje "Buscando..." y ahi se queda, sin mostrar los resultados.

deskME-main.js
Código: Seleccionar todo

Ext.onReady(function(){

    var ds = new Ext.data.Store({
        proxy: new Ext.data.ScriptTagProxy({
            //url: 'http://extjs.com/forum/topics-remote.php'
       url: 'deskME-main-remote.php'
        }),
        reader: new Ext.data.JsonReader({
            root: 'results',
       totalProperty: 'totalCount',
       id: 'doc'
        }, [
            {name: 'doc', mapping: 'doc'},
            {name: 'apellido', mapping: 'apellido'},
            {name: 'nombre', mapping: 'nombre'},
            {name: 'domicilio', mapping: 'domicilio'}

        ])
    });

    // Custom rendering Template
    var resultTpl = new Ext.XTemplate(
        '<tpl for="."><div class="search-item">',
            '<h3><span><br />DNI {doc}</span>{apellido}, {nombre}</h3>',
            '{domicilio}',
        '</div></tpl>'
    );
   
    var search = new Ext.form.ComboBox({
        store: ds,
        displayField:'doc',
        typeAhead: false,
        loadingText: 'Buscando...',
        width: 570,
        pageSize: 10,
   mode: 'remote',
        hideTrigger:true,
        tpl: resultTpl,
        applyTo: 'search',
        itemSelector: 'div.search-item',
        onSelect: function(record){ // override default onSelect to do redirect
            //window.location =
              //  String.format('http://extjs.com/forum/showthread.php?t={0}&p={1}', record.data.topicId, record.id);
        }
    });
});


del lado del server:
Código: Seleccionar todo
<?php
require('../../system/lib/conexion_db.php');

$q = "SELECT doc, apellido, nombre, domicilio FROM hospital_pacientes WHERE apellido LIKE '%".$_GET['query']."%'";
  //echo $q;
  $result = mysql_query($q);
  $nbrows = mysql_num_rows($result);
  $start = (integer) (isset($_POST['start']) ? $_POST['start'] : $_GET['start']);
  $end = (integer) (isset($_POST['limit']) ? $_POST['limit'] : $_GET['limit']);
  $limit = $q." LIMIT ".$start.",".$end;   
  $result = mysql_query($limit);
  //echo $q;
 
  $arr=array();
  if($nbrows>0){
    while($rec = mysql_fetch_array($result)){            
     array_push($arr, array(doc=>$rec[0], apellido=>$rec[1], nombre=>$rec[2], domicilio=>$rec[3]));
    }

    $jsonresult = JEncode($arr);
    echo '({ totalCount: "'.$nbrows.'", results: '.$jsonresult.'})';
  } else {
    echo '({ totalCount: "0", results: ""})';
  }


// Encodes a SQL array into a JSON formated string
function JEncode($arr){
    if (version_compare(PHP_VERSION,"5.2","<"))
    {   
        require_once("./JSON.php"); //if php<5.2 need JSON class
        $json = new Services_JSON();//instantiate new json object
        $data=$json->encode($arr);  //encode the data in json format
    } else
    {
        $data = json_encode($arr);  //encode the data in json format
    }
    return $data;
}

// Encodes a YYYY-MM-DD into a DD-MM-YYYY string
function codeDate ($date) {
  $tab = explode ("-", $date);
  $r = $tab[1]."/".$tab[2]."/".$tab[0];
  return $r;
}      
?>


Alguien me da una mano? Gracias!
Última edición por golemsolutions el 05 Feb 2009, 17:30, editado 1 vez en total
Para no ver esta publicidad, debes ser usuario del Foro.
Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)


Cuixer, una forma de administrar páginas web que nunca viste!

Avatar de Usuario
Ext.foro.Administrador
Mensajes: 1932
Registrado: 07 Mar 2008, 20:45
Ubicación: Argentina
NotaPublicado: 05 Feb 2009, 12:26
A ver, proba cambiando en tu Store, Ext.data.ScriptTabProxy() por Ext.data.HttpProxy.

El ScriptTabProxy se usa para hacer CrossDomain.
Aprender haciendo...
Desarrollo de aplicaciones en ExtJS [CONSULTAR].
Buscar en el foro antes de preguntar y Leer la Documentación.
Imagen
Avatar de Usuario
Ext.foro.Moderador
Mensajes: 16
Registrado: 01 Dic 2008, 18:59
NotaPublicado: 05 Feb 2009, 12:29
Amigazo, ahora funciono!! Simplemente cambiando el objeto el combo despliega el template con los datos de la base.

Pero ahora hay otro inconveniente, no me filtra los datos que le indico.
Avatar de Usuario
Ext.foro.Moderador
Mensajes: 16
Registrado: 01 Dic 2008, 18:59
NotaPublicado: 05 Feb 2009, 13:00
Gracias al aporte de GarraS se soluciono el inconveniente. Paso a describir lo que sucedia:

Al cambiar por HttpProxy, los parametros query, limit y start se envian via POST (salvo que se indique lo contrario) por lo que del lado del server hay que cambiar solamente la siguiente linea:

Código: Seleccionar todo
$q = "SELECT doc, apellido, nombre, domicilio FROM hospital_pacientes WHERE apellido LIKE '%".$_GET['query']."%'";


por:

Código: Seleccionar todo
$q = "SELECT doc, apellido, nombre, domicilio FROM hospital_pacientes WHERE apellido LIKE '%".$_POST['query']."%'";


... y listo!! ahora el combo mostrara los resultados paginados y segun el criterio que escribimos.

Saludos!
Última edición por Ramiro P. Saenz (garraS) el 05 Feb 2009, 13:50, editado 1 vez en total
Avatar de Usuario
Ext.foro.Administrador
Mensajes: 1932
Registrado: 07 Mar 2008, 20:45
Ubicación: Argentina
NotaPublicado: 05 Feb 2009, 13:51
No te olvides de poner la [R] en el título del post.
Aprender haciendo...
Desarrollo de aplicaciones en ExtJS [CONSULTAR].
Buscar en el foro antes de preguntar y Leer la Documentación.
Imagen

Ext.foro.Nuevo
Mensajes: 2
Registrado: 08 Feb 2011, 13:49
NotaPublicado: 20 Mar 2011, 14:08
Como estan.. yo tengo un problema con el combo con template.. todos los pasos q siguieron los realice..

El problema es q no se q variable recibe en ajax..

en su ejemplo es $_POST['query'].. pero donde se define eso??..

o talvez como es el codigo del ajax (php)

no se si m pueden dar una mano... por favor U_U
Avatar de Usuario
Ext.foro.Moderador
Mensajes: 353
Registrado: 17 Ago 2009, 12:06
NotaPublicado: 20 Mar 2011, 22:03
cuando utilizas ajax, puedes pasar los parametros por params o baseParams, por ejemplo para un load de un store, lo haces asi:

Código: Seleccionar todo
store.load({
params:{
      parametro1: 'valor_de_mi_parametro',
      parametro2: 'valor_de_mi_otro_parametro'
}
})
;

y en php los lees asi:

Código: Seleccionar todo
$parametro1 = $_POST['parametro1'];
$parametro2 = $_POST['parametro2'];


si ejecutas un ajax.request es lo mismo:

Código: Seleccionar todo
Ext.Ajax.request({
  url: '',
  params: {
    parametro1: 'valor'
  },
  scope: this,
  success: function(response){
    info = Ext.decode(response.responseText);
  },
  failure: function(response){
 
  }
});


espero te sirva

Volver a Ext 2.0: Ayuda





  • Publicidad (ayudanos a mantener el Foro haciendo un click sobre la misma)
  • Cuixer, una forma de administrar páginas web que nunca viste!

cron