Rescatar arreglo con Ajax.Request

111 views
Skip to first unread message

Patricio Avila

unread,
Nov 10, 2009, 9:20:25 AM11/10/09
to codeigniter-spanish
Bueno la idea es la siguiente hacer un Ajax.Request que me devuelva un arreglo con los datos de una base de datos hasta ahì todo bien en el modelo tengo lo siguiente

 //-------------------------------------------------------------------------
        //Entrega todas las empresas de acuerdo al turno pasado como parametro
        function empresas_por_turno($turno)
        {
            if ($turno == 'diurno')
                $this->db->where('diurno', 1);
            else
                $this->db->where('nocturno', 1);
            return $this->db->get('empresas');

        }

Esta consulta la llamo desde el controlador dela siguiente manera

//en este caso el filtro es el valor del turno
    function ajax_rescata_empresas()
    {
        $turno = $this->input->post('turno');
        echo $this->empresas_model->empresas_por_turno($turno);
    }


y desde javascript hago lo siguiente

function enviarCorreos()
{
  alert(valor_radio('turno'))
  var params ={
       'turno':valor_radio('turno')
            };


    var ajax = new Ajax.Request(
        base_url+'/empresas/ajax_rescata_empresas/',
        {
            method:'post',
            parameters:params
            }
        );

}

Lo que según firebug me arroja el siguiente error.
<div style="border:1px solid #990000;padding-left:20px;margin:10px;">

<h4>A PHP Error was encountered</h4>

<p>Severity: 4096</p>
<p>Message:  Object of class CI_DB_mysql_result could not be converted to string</p>
<p>Filename: controllers/empresas.php</p>
<p>Line Number: 322</p>

</div>

Bueno si alguien ha hecho esto y me puede orientar se lo agradecería, como dato la libreria javascript es prototype y la consulta la base de datos funciona ya que sin ajax ya la he usado.

Saludos.



--
Patricio Ávila Figueroa
http://palcierre.blogspot.com
http://identi.ca/elkan

<<P431i7o>>

unread,
Nov 10, 2009, 1:54:58 PM11/10/09
to codeignit...@googlegroups.com
creo que sucede esto
no estas haciendo un result o row sobre el get

return $this->db->get('empresas')->result() para que te lo devuelva en un array de objetos
return $this->db->get('empresas')->result_array() para que te lo devuelva en un array asociativo
return $this->db->get('empresas')->row() para que te lo devuelva un solo registro

o es que ya me oxide, hace rato no estoy usando CI, jeje pero creo que es eso

podrias hacer un

foreach($this->empresas_model->empresas_por_turno($turno) as $empresa){
echo $empresa->tu_columana1;
}

para probar que sea eso
--
Saludos Cordiales
---------------------------------------------
Pablo F.Ruiz Diaz Rios
Departamento Web
RedSoft Informática & Networking

Página web: http://www.rs.com.py
Celphone: 595-961-882-130
messenger: http://tinymailto.com/p431i7omsn

Patricio Avila

unread,
Nov 10, 2009, 2:02:44 PM11/10/09
to Codeigniter
Creo que mi tema va más porque no se pueden devolver variables de esta forma y según lo que he leído deberé devolver algo formateado con xml o json.

Sigo investigando, gracias por la ayuda.

Patricio Avila Figueroa
Usuario Linux #454898
Sent from my BlackBerry® wireless device
http://indenti.ca/elkan
http://palcierre.blogspot.com


From: "<<P431i7o>>" <pablito....@gmail.com>
Date: Tue, 10 Nov 2009 15:54:58 -0300
Subject: [codeigniter-spanish] Re: Rescatar arreglo con Ajax.Request

Fásiko

unread,
Nov 10, 2009, 2:52:33 PM11/10/09
to codeignit...@googlegroups.com
Patricio, en verdad el problema lo tienes en la manera que tratas los datos del modelo en el controlador.
La verdad es que utilizo las consultas sql escribiéndolas directamente, por lo que no he probado este método al 100% pero es la lógica de trabajo de codeigniter.

En el controlador recibimos un array con los datos, así que haríamos un:

    function ajax_rescata_empresas()
    {
        $turno = $this->input->post('turno');
        $datos = $this->empresas_model->empresas_por_turno($turno);
        if( $datos->num_rows() > 0 )
        {
             $datos = $datos->result_array();
             foreach( $datos as $datos_line )
             {
                   echo $datos_line['nombre_de_columna_a_mostrar'];
             }
        }
        else
        {
             echo 'No se retornaron datos';
        }
    }

Básicamente lo que hacemos es comprobar si se retorna más de 0 resultados (osease si hay resultados) y si es así, reasignamos a la variable el array que contiene los datos y recorremos dicho array.

Otro problema que tienes es que haces la consulta mediante ajax pero no haces nada con los datos que recibes (osease, no se muestran porque no especificas que debe hacer).
Te recomiendo que utilices algún framework javascript ya que te será muchísimo más sencillo.
Por ejemplo, si utilizases prototype, puedes hacer lo siguiente para obtener los datos asíncronamente e insertarlos:

new Ajax.Updater('id_de_la_capa_DIV_donde_insertar_el_resultado', '/url/a/solicitar/mediante/ajax', {

     method: 'get',

     parameters: { 'turno':valor_radio('turno') },

     evalScripts: true

});

Patricio Avila

unread,
Nov 10, 2009, 3:01:26 PM11/10/09
to Codeigniter
Amigo gracias por los tips para la consulta, con respecto a lo de ajax la idea era rescatar los valores para meterlos en un array javascript y recorrer este arrat llamándo a otra función.

Saludos y gracias

Patricio Avila Figueroa
Usuario Linux #454898
Sent from my BlackBerry® wireless device
http://indenti.ca/elkan
http://palcierre.blogspot.com


From: Fásiko <fas...@gmail.com>
Date: Tue, 10 Nov 2009 20:52:33 +0100

Ever Daniel Barreto

unread,
Nov 10, 2009, 3:49:04 PM11/10/09
to codeignit...@googlegroups.com, Codeigniter
patricio, para hacer lo que describes te recomiendo utilizar json ya que es mucho mas facil manejarlo desde javascript ya que obtienes datos utilizando los tipos de variables nativos de javascript

- Ever Daniel Barreto

Patricio Ávila F.

unread,
Nov 12, 2009, 10:26:48 AM11/12/09
to CodeIgniter-spanish
Ya logro generar el arreglo con JSON pero no hay manera de poder
recorrerlo el resultado es del tipo

[{"id":"65","nombre":"ALBERTO GARRIDO","diurno":"0","nocturno":"1"},
{"id":"52","nombre":"CARLOS BAEZA","diurno":"0","nocturno":"1"}]


y el código para reccorrerlo es el siguiente:

//Recibe los datos JSON del Ajax.Request y los muestra
function procesar(datos)
{
//guardo el div donde voy a escribir los datos en una variable
var contenedor = document.getElementById("lista");

contenedor.innerHTML = datos;

texto = "";

//Itero sobre los datos que me pasan como parametro
for (var i=0; i < datos.length; i++)
{
dato = datos[i];
alert(dato.id);
texto += "Dato "+ i +" - campo1 :" + dato.id + " - campo2 :" +
dato.nombre + " ";
}

//Escribo el texto que forme en el div que corresponde
contenedor.innerHTML = texto;

}


Si alguien me da uan última mano, lo agradecería.


Saludos y gracrias, por la ayuda.







On 10 nov, 17:49, Ever Daniel Barreto <everdan...@gmail.com> wrote:
> patricio, para hacer lo que describes te recomiendo utilizar json ya  
> que es mucho mas facil manejarlo desde javascript ya que obtienes  
> datos utilizando los tipos de variables nativos de javascript
>
> - Ever Daniel Barreto
>
> El 10/11/2009, a las 05:01 p.m., "Patricio Avila "  
> <pgavi...@gmail.com> escribió:
>
>
>
> > Amigo gracias por los tips para la consulta, con respecto a lo de  
> > ajax la idea era rescatar los valores para meterlos en un array  
> > javascript y recorrer este arrat llamándo a otra función.
>
> > Saludos y gracias
> > Patricio Avila Figueroa
> > Usuario Linux #454898
> > Sent from my BlackBerry® wireless device
> >http://indenti.ca/elkan
> >http://palcierre.blogspot.com
>
> > <pgavi...@gmail.com> escribió:
> > Creo que mi tema va más porque no se pueden devolver variables de es
> > ta forma y según lo que he leído deberé devolver algo formateado  
> > con xml o json.
>
> > Sigo investigando, gracias por la ayuda.
> > Patricio Avila Figueroa
> > Usuario Linux #454898
> > Sent from my BlackBerry® wireless device
> >http://indenti.ca/elkan
> >http://palcierre.blogspot.com
>
> > From: "<<P431i7o>>" <pablito.feder...@gmail.com>
> > Date: Tue, 10 Nov 2009 15:54:58 -0300
> > To: <codeignit...@googlegroups.com>
> > Subject: [codeigniter-spanish] Re: Rescatar arreglo con Ajax.Request
>
> > creo que sucede esto
> > no estas haciendo un result o row sobre el get
>
> > return $this->db->get('empresas')->result() para que te lo devuelva  
> > en un array de objetos
> > return $this->db->get('empresas')->result_array() para que te lo  
> > devuelva en un array asociativo
> > return $this->db->get('empresas')->row() para que te lo devuelva un  
> > solo registro
>
> > o es que ya me oxide, hace rato no estoy usando CI, jeje pero creo  
> > que es eso
>
> > podrias hacer un
>
> > foreach($this->empresas_model->empresas_por_turno($turno) as  
> > $empresa){
> > echo $empresa->tu_columana1;
> > }
>
> > para probar que sea eso
>
> > El 10 de noviembre de 2009 11:20, Patricio Avila  
> > <pgavi...@gmail.com> escribió:
> > messenger:http://tinymailto.com/p431i7omsn- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Patricio Ávila F.

unread,
Nov 12, 2009, 10:34:16 AM11/12/09
to CodeIgniter-spanish

Una corrección a mi mismo

la línea

> contenedor.innerHTML = datos;

No debería ir la tenía para generar el array en la pagina.
> > > messenger:http://tinymailto.com/p431i7omsn-Ocultar texto de la cita -
>
> > - Mostrar texto de la cita -- Ocultar texto de la cita -

Ever Daniel Barreto Rojas

unread,
Nov 12, 2009, 3:37:38 PM11/12/09
to codeignit...@googlegroups.com
Hola Patricio,

El día 12 de noviembre de 2009 12:26, Patricio Ávila F.
<pgav...@gmail.com> escribió:


> Ya logro generar el arreglo con JSON pero no hay manera de poder
> recorrerlo el resultado es del tipo

Ahora ya tengo acceso a mi código asi es que aquí te paso una funcion
de javascript que obtiene los resultados en JSON y después los
procesa:
http://pastebin.com/m2bb9acb6

Y ésta es la función en PHP que genera los datos y retorna JSON (ojo
esto es usando Zend Framework y no CI, pero los cambios que tenés que
hacer son mínimos):
http://pastebin.com/d52983fe1

Y éste es un screenshot de cómo se ven los datos en Firebug:
http://www.screencast.com/t/Nzg4NzEy

Espero que ésto te ayude.

Saludos,

---
Ever Daniel Barreto Rojas
everdaniel at gmail dot com
www.everdaniel.com

Patricio Avila

unread,
Nov 12, 2009, 3:47:18 PM11/12/09
to codeignit...@googlegroups.com
Gracias amigo.

Estoy revisando al momento

El 12/11/09, Ever Daniel Barreto Rojas <everd...@gmail.com> escribió:

Ever Daniel Barreto Rojas

unread,
Nov 12, 2009, 4:05:37 PM11/12/09
to codeignit...@googlegroups.com
Patricio,

un detalle importante, yo uso Mootools, por lo que no sé qué tanto de
diferencia hay con el que vos usás (que si no estoy equivocado es
Scriptaculous/Prototype)

Ever Daniel Barreto Rojas
everdaniel at gmail dot com
www.everdaniel.com



El día 12 de noviembre de 2009 17:47, Patricio Avila
<pgav...@gmail.com> escribió:

Ever Daniel Barreto Rojas

unread,
Nov 16, 2009, 3:08:43 PM11/16/09
to codeignit...@googlegroups.com
Que tal Patricio, pudiste conseguir lo que estabas intentando?

Saludos,

---
Ever Daniel Barreto Rojas
everdaniel at gmail dot com
www.everdaniel.com



El día 12 de noviembre de 2009 18:05, Ever Daniel Barreto Rojas

Ever Daniel Barreto Rojas

unread,
Nov 16, 2009, 3:13:34 PM11/16/09
to codeignit...@googlegroups.com
Genial!... un artículo en tu blog sería genial!... yo tuve que "bajar"
mi blog por no tener tiempo para actualizarlo :(

Saludos,

---
Ever Daniel Barreto Rojas
everdaniel at gmail dot com
www.everdaniel.com



El día 16 de noviembre de 2009 17:11, Patricio Avila
<pgav...@gmail.com> escribió:
> Si amigo use json php y me resultó todo ok.
>
> Gracias por tu ayuda.
>
> Planeo escribir algo en mi Blog sobre la integración de json php en codeigniter .
>
> Saludos
> Patricio Avila Figueroa
> Usuario Linux #454898
> Sent from my BlackBerry® wireless device
> http://indenti.ca/elkan
> http://palcierre.blogspot.com
>
> -----Original Message-----
> From: Ever Daniel Barreto Rojas <everd...@gmail.com>
> Date: Mon, 16 Nov 2009 17:08:43
> To: <codeignit...@googlegroups.com>
> Subject: [codeigniter-spanish] Re: Rescatar arreglo con Ajax.Request
>
>
Reply all
Reply to author
Forward
0 new messages