Foros del Web » Programando para Internet » Jquery »

llenar select con respuesta de json

Estas en el tema de llenar select con respuesta de json en el foro de Jquery en Foros del Web. Hola que tal, Estoy haciendo un carga automatica de codigos postales.. poniendo el codigo postal se llenan en automatico los demas campos (colonia, municipio y ...
  #1 (permalink)  
Antiguo 18/11/2014, 17:56
Avatar de totti026  
Fecha de Ingreso: junio-2011
Mensajes: 150
Antigüedad: 12 años, 10 meses
Puntos: 4
Pregunta llenar select con respuesta de json

Hola que tal,

Estoy haciendo un carga automatica de codigos postales..
poniendo el codigo postal se llenan en automatico los demas campos (colonia, municipio y estado)...


Pero el campo colonia me gustaria cambiarlo por un select
ya que como campo (text) tiene todas las colonias separadas por un ";"
pero quisiera que cada colonia se convirtiera en un option dentro de un select.

este es mi script y formulario:

Código HTML:
Ver original
  1. .
  2. .
  3. .
  4.             $(document).ready(function(){  
  5.                
  6.                
  7.                 $("#cp").focusout(function(){
  8.                     $.ajax({
  9.                         url:'alumno.php',
  10.                         type:'POST',
  11.                         dataType:'json',
  12.                         data:{ cp: $('#cp').val() }
  13.                     }).done(function(respuesta){
  14.                         $("#colonia").val(respuesta.colonia);
  15.                         $("#municipio").val(respuesta.municipio);
  16.                         $("#estado").val(respuesta.estado);
  17.                     });
  18.                 });                            
  19.             });
  20.         </script>
  21.                    
  22.     </head>
  23.     <body>
  24.        
  25.         <form>
  26.             <label for="cp">cp:</label>
  27.             <input type="text" id="cp" name="cp" value=""/>
  28.             <label for="colonia">Colonia:</label>
  29.             <input type="text" id="colonia" name="colonia" value=""/>            
  30.             <label for="municipio">Delegacion/Municipio:</label>
  31.             <input type="text" id="municipio" name="municipio" value=""/>
  32.             <label for="estado">Ciudad/Estado:</label>
  33.             <input type="text" id="estado" name="estado" value=""/>
  34.         </form>
  35.     </body>
  36. .
  37. .
  38. .

y este mi PHP
Código PHP:
Ver original
  1. <?php    
  2.     $conexion = new mysqli('localhost','root','','cp',3306);
  3.     mysqli_set_charset($conexion, "utf8");
  4.     $cp = $_POST['cp'];
  5.     $consulta = "SELECT colonia, municipio, estado FROM codigospostales WHERE CodigoPostal = '$cp'";
  6.    
  7.     $result = $conexion->query($consulta);
  8.    
  9.     $respuesta = new stdClass();
  10.     if($result->num_rows > 0){
  11.         $fila = $result->fetch_array();
  12.         $respuesta->colonia = $fila['colonia'];
  13.         $respuesta->municipio = $fila['municipio'];
  14.         $respuesta->estado = $fila['estado'];      
  15.     }
  16.     echo json_encode($respuesta);
  17.  
  18. ?>
  #2 (permalink)  
Antiguo 18/11/2014, 19:59
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 389
Antigüedad: 13 años, 1 mes
Puntos: 16
Respuesta: llenar select con respuesta de json

Ese query que realizas está bien? Tienes toda esa data en la misma tabla?
Creo que deberias tener las colonias en una y municipios y estados en otras dos no?
Bueno, suponiendo que tienes todo eso bien...

Creo que puedes hacer dos cosas.
1. En vez de enviar un json Crear los options desde el código en PHP y devolver HTML
Seria algo así : (Teniendo en cuenta q la parte de la consulta y eso resulte, que no estoy seguro de q estes guardando todos los registros que te traiga la bd.

Código PHP:
Ver original
  1. $options = "";
  2. while($data = mysqli_fetch_assoc($result)){
  3.         $options.="<option value=\"$result[id_colonia]\">$result[colonia]</option>";
  4. }
  5. // Luego retornas el option
  6.  
  7. print($options)

Con js en la parte que capturas la respueta: (obviando lo que ya tienes hecho)
Código Javascript:
Ver original
  1. ....
  2. .done(function(respuesta){
  3.                         $("#colonia").html(respuesta);
  4.                     });

2. Devuelves el query completo de las colonias en un json (para cual debes recorrer el result de la bd con un while y guardarlo en un array, luego devolverlo como ya haces por json_encode). Lo capturas con jQuery y lo recorres con la funcion each, armando las options en js

Código Javascript:
Ver original
  1. .done(function(respuesta){
  2.                         var options = "";
  3.                         $.each(respuesta.colonias,function(key,value){
  4.                                   options+='<option value="key">value</option>';
  5.                          })
  6.  
  7.                          $("#colonias").html(options)
  8.                     });

NOTA: uso la función .html de jquery y no "val" pues si es un selector "<select>" el contiene html "<option>" y la función .val() no le aplica.

Espero te sirva. saludos
__________________
Lo imposible es lo posible visto por los ojos de un incapaz.
Si te sirve la respuesta. dale + al karma.
Saludos
  #3 (permalink)  
Antiguo 19/11/2014, 17:18
Avatar de totti026  
Fecha de Ingreso: junio-2011
Mensajes: 150
Antigüedad: 12 años, 10 meses
Puntos: 4
Respuesta: llenar select con respuesta de json

Gracias rjulio21,

el campo colonia en la bd viene asi por ejemplo:
Código txt:
Ver original
  1. Ampliación El Capulin;El Capulín;Liberales de 1857;Belém de las Flores

tengo separadas las colonias porun punto y coma.

en mi php hice esto:
Código PHP:
Ver original
  1. <?php
  2.    
  3.     //$mysqli->set_charset("utf8");
  4.     $conexion = new mysqli('localhost','root','','cp',3306);
  5.     mysqli_set_charset($conexion, "utf8");
  6.     $cp = $_POST['cp'];
  7.     $consulta = "SELECT colonia, municipio, estado FROM codigospostales WHERE CodigoPostal = '$cp'";
  8.    
  9.     $result = $conexion->query($consulta);
  10.    
  11.     $respuesta = new stdClass();
  12.     if($result->num_rows > 0){
  13.  
  14.         while($fila = $result->fetch_array())
  15.         {          
  16.             $respuesta->colonia = $fila['colonia'];
  17.             $respuesta->municipio = $fila['municipio'];
  18.             $respuesta->estado = $fila['estado'];
  19.         }      
  20.        
  21.     }
  22.     echo json_encode($respuesta);
  23.  
  24. ?>

y en el script lo que sugeriste:
Código Javascript:
Ver original
  1. $("#cp").focusout(function(){
  2.                     $.ajax({
  3.                         url:'alumno.php',
  4.                         type:'POST',
  5.                         dataType:'json',
  6.                         data:{ cp: $('#cp').val() }
  7.                     }).done(function(respuesta){                        
  8.  
  9.                         $("#colonia").val(respuesta.colonia);
  10.                         $("#municipio").val(respuesta.municipio);
  11.                         $("#estado").val(respuesta.estado);
  12.                        
  13.                         var options = "";
  14.                         $.each(respuesta.colonia,function(key,value){
  15.                                   options+='<option value="key">value</option>';
  16.                          })
  17.  
  18.                          $("#colonias").html(options);
  19.                     });
  20.                 });

Solo que me arroja este error...
Código error:
Ver original
  1. Uncaught TypeError: Cannot use 'in' operator to search for '69' in Ampliación El Capulin;El Capulín;Liberales de 1857;Belém de las Flores

Muchas gracias por tu tiempo
  #4 (permalink)  
Antiguo 19/11/2014, 18:14
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 389
Antigüedad: 13 años, 1 mes
Puntos: 16
Respuesta: llenar select con respuesta de json

Tengo dos preguntas.

1. Aqui :
Código PHP:
Ver original
  1. $respuesta = new stdClass();
  2.     if($result->num_rows > 0){
  3.  
  4.         while($fila = $result->fetch_array())
  5.         {          
  6.             $respuesta->colonia = $fila['colonia'];
  7.             $respuesta->municipio = $fila['municipio'];
  8.             $respuesta->estado = $fila['estado'];
  9.         }      
  10.        
  11.     }
  12.     echo json_encode($respuesta);

No sobreescribes los valores? Porque simplemente no creas un arreglo para que como tal llegue como json alla?

2. lo has impreso en PHP para ver que se este armando correctamente la estructura? Supongo que el error te da en js... ¿No? Es probable que el JSON no se haya armado correctamente.
__________________
Lo imposible es lo posible visto por los ojos de un incapaz.
Si te sirve la respuesta. dale + al karma.
Saludos

Etiquetas: json, respuesta, select
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 09:08.