Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Recibir un array en function (data)

Estas en el tema de Recibir un array en function (data) en el foro de Jquery en Foros del Web. Buenas, Tengo un procedimiento php, que devuelve en un array dos valores: - una tabla html con los registros obtenidos de una base de datos ...
  #1 (permalink)  
Antiguo 03/09/2015, 02:07
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 3 meses
Puntos: 4
Recibir un array en function (data)

Buenas,
Tengo un procedimiento php, que devuelve en un array dos valores:
- una tabla html con los registros obtenidos de una base de datos
- el total de registros

Hasta ahora, lo tenía implementado con un sólo parámetro, el primero, el conjunto de registros y bien. Pero ahora me gustaría recibir el total de registros que devuelve y no funciona.

El código es así:

Código PHP:
Ver original
  1. ....
  2. echo json_encode(array("prm1"=>"xxx", "prm2"=>"yyy"))

Código Javascript:
Ver original
  1. $.post("<?php echo URL.'includes/inc_proc.php'?>", function(data){
  2.     $("#contingut").html(data.prm1);
  3.     $("#totalTrobats").html(data.prm2l);
  4. });

Alguien podría decirme dónde está el error?
Gracias
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #2 (permalink)  
Antiguo 03/09/2015, 02:59
 
Fecha de Ingreso: julio-2011
Mensajes: 220
Antigüedad: 12 años, 9 meses
Puntos: 72
Respuesta: Recibir un array en function (data)

Lo que está recibiendo $.post del servidor es una cadena de texto y para poder obtener la información es necesario transformarla en un objeto javascript, esto se puede hacer con eval()
Código Javascript:
Ver original
  1. data= eval("("+data+")");
  2. $("#contingut").html(data.prm1);
  3. $("#totalTrobats").html(data.prm2);

También existe la función $.getJSON de jquery que hace esto automáticamente. Saludos.
  #3 (permalink)  
Antiguo 03/09/2015, 03:15
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Recibir un array en function (data)

En la segunda propiedad te está sobrando un "1" al final, además, como recibes un objeto JSON, luego de la llamada de retorno, debes de especificar el tipo de dato recibido.

Código Javascript:
Ver original
  1. $.post("url", function(){/**/}, "json");

Siempre consulta el manual.

No te aconsejo usar la función eval() por motivos de seguridad.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #4 (permalink)  
Antiguo 03/09/2015, 03:49
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: Recibir un array en function (data)

Gracias Alexis88, tomo nota del tema de seguridad y excluyo el uso de eval.
Cierto, sobraba el 1, ha sido error de transcripción
He añadido el tipo "json" al último parámetro del .$.post, pero no devuelve nada.

Tengo que hacer algo más?
Gracias
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #5 (permalink)  
Antiguo 03/09/2015, 09:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Recibir un array en function (data)

Depura tu código.

Código Javascript:
Ver original
  1. $.post("url", function(data){
  2.     console.log(data);
  3. }, "json");

Verifica en la consola del navegador la respuesta que recibes (pulsa la tecla F12 y, en el panel que se desplegará, selecciona "Console" si usas Chrome o "Consola" si usas Firefox).

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 03/09/2015, 10:37
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: Recibir un array en function (data)

He depurado, tal como me comentabas.Miro parámetro a parámetro y de esta forma funciona.
El primer parámetro devuelve un gran string, que contiene, en formato html una tabla con algunos registros.
El segundo devuelve el total de registros.

Cuando creo el array json con ambos parámetros no devuelve nada.

Código PHP:
Ver original
  1. echo json_encode(array("prm1"=>$retorn, "prm2"=>$registres));

Gracias
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #7 (permalink)  
Antiguo 03/09/2015, 11:13
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Recibir un array en function (data)

Por lo que comentas, parece ser un problema de alcance de las variables. ¿De casualidad estas toman sus valores dentro de alguna función o método?

Sería ideal poder ver en qué parte exactamente les asignas valores.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 03/09/2015, 12:12
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: Recibir un array en function (data)

Buenas,
Te pongo el código para que veas:

Código Javascript:
Ver original
  1. $.post("<?php echo URL.'includes/inc_getImmobles.php'?>", {prm:prmTipus+"-"+prmCiutat+"-"+prmPreu+"-"+prmHabitacions+"-"+prmMetres+"-"+prmOrdre+"-"+prmDireccio+"-"+prmBarris}, function(data){
  2.                 $("#contingut").html(data.immobles);
  3.                 $("#totalTrobats").html("TROBATS " + data.total);
  4.             },"json");


Código PHP:
Ver original
  1. <?php
  2.     $parametres = $_REQUEST["prm"];
  3.     $arrPrm = explode('-', $parametres);
  4.     $tipus = $arrPrm[0];
  5.     $ciutat = $arrPrm[1];
  6.     $preu = $arrPrm[2];
  7.     $habitacions = $arrPrm[3];
  8.     $metres = $arrPrm[4];
  9.     $ordre = $arrPrm[5];
  10.     $direccio = $arrPrm[6];
  11.     $zones = $arrPrm[7];
  12.  
  13.     include("inc_config.php");
  14.     include("inc_connexio.php");
  15.        
  16.     $condicions = "";
  17.     if ($tipus != "")
  18.         $condicions = $tipus;
  19.  
  20.     if ($ciutat != "") {
  21.         if ($condicions != "")
  22.             $condicions .= " AND ";
  23.         $condicions .= $ciutat;
  24.     }  
  25.  
  26.     if ($preu != "") {
  27.         if ($condicions != "")
  28.             $condicions .= " AND ";
  29.         $condicions .= $preu;
  30.     }
  31.    
  32.     if ($habitacions != "") {
  33.         if ($condicions != "")
  34.             $condicions .= " AND ";
  35.         $condicions .= $habitacions;
  36.     }
  37.    
  38.     if ($metres != "") {
  39.         if ($condicions != "")
  40.             $condicions .= " AND ";
  41.         $condicions .= $metres;
  42.     }
  43.        
  44.     if ($zones != "") {
  45.         if ($condicions != "")
  46.             $condicions .= " AND ";
  47.         $condicions .= $zones;
  48.     }
  49.                
  50.     if ($ordre == "")
  51.         $ordenat = "";
  52.     else {
  53.         if ($ordre == "Preu")
  54.             $ordenat = " ORDER BY precio";
  55.         else if ($ordre == "M2")
  56.             $ordenat = " ORDER BY metros";
  57.         else if ($ordre == "Habitacions")
  58.             $ordenat = " ORDER BY habitaciones";
  59.         else
  60.             $ordenat = " ORDER BY nombre_poblacion";
  61.     if ($direccio == "D")
  62.         $ordenat .= " DESC";
  63.     }  
  64.        
  65.  
  66.     $consulta = "SELECT U.referencia, U.familia, U.situacion1, U.precio, U.metros, U.habitaciones, U.CodigoPostal, P.nombre_poblacion, F.foto, E.titulo, E.descripcion
  67.              FROM t_un U
  68.              LEFT JOIN t_fotos F ON U.referencia = F.referencia
  69.              INNER JOIN t_es E ON U.id_piso = E.id_piso
  70.              INNER JOIN t_poblacion P ON u.poblacion = P.id_poblacion
  71.              WHERE ".$condicions."
  72.              GROUP BY U.referencia";
  73.     $qSelect =  mysql_query($consulta);
  74.     $registres = mysql_num_rows($qSelect);
  75.  
  76.     if ($registres > 0){
  77.         $retorn = "<table id='taulaContingut'>";
  78.         while ($fila = mysql_fetch_assoc($qSelect)) {
  79.             $retorn .= "<tr class='filaContingut'>
  80.                 <td class='columnaContingut' id='columnaContingut'><a href=''><img src=".URL."fincamps_HS/".$fila['foto']."></a></td>
  81.                 <td class='columnaContingut'><a href=''><span><p>".$fila['situacion1']." - ".$fila['titulo'].'(ref. '.$fila['referencia'].')</p></span><p>'.
  82.                 number_format($fila['precio'], 2, ',','.')."€ - ".
  83.                 $fila['metros'].'m² - ';
  84.             if ($fila['habitaciones'] != "0")
  85.                 $retorn .= $fila['habitaciones'].' habs. - ';
  86.             $retorn .= $fila['nombre_poblacion']."</p>".$fila["descripcion"]."</a></td></tr>";
  87.         }
  88.         $retorn .= "</table>";
  89.     }
  90.     echo json_encode(array("immobles"=>$retorn, "total"=>$registres));
  91. ?>

He pensado que no fuera porqué el contenido de la variable $retorn fuera muy grande, y lo he probado así:

Código PHP:
Ver original
  1. echo json_encode(array("immobles"=>"aaa", "total"=>"bbb"));
Y tampoco devuelve nada

Creo que el problema lo tengo con json_encode, pero he mirado por Internet y el manual y no sé ver nada.

Gracias
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #9 (permalink)  
Antiguo 03/09/2015, 13:11
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: Recibir un array en function (data)

Como no lo he conseguido, envio un sólo string, al principio los registros y a continuación los registros.
En jquery, separo los valores. Creo que no es la mejor solución. Pero funciona
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #10 (permalink)  
Antiguo 03/09/2015, 14:32
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Recibir un array en function (data)

Es raro lo que comentas. Lo normal sería que obtengas los datos, a menos de que la consulta a la BD no haya devuelto resultados y por eso las variables estén vacías. Otra posibilidad es que estés teniendo un problema de caching y tengas que esperar algunos minutos para que la aplicación se ejecute con el código actualizado, pero solo estoy especulando.

Solo para descartar, en el panel de herramientas de desarrollador del navegador web, elige la pestaña "Network" en Chrome o "Red" en Firefox y ejecuta tu aplicación. Aparecerá en la lista el nombre del archivo hacia el cual enviaste la petición con los valores. Selecciónalo y, en el panel de la derecha, selecciona "Response" en Chrome o "Respuesta" en Firefox para verificar si hay algún mensaje de error producido en el lado del servidor.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: function, recibir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:32.