PHP - Problema con select dependiente

   
Vista:

Problema con select dependiente

Publicado por Endika (14 intervenciones) el 23/08/2017 10:40:15
Hola¡

A ver si me podéis echar un cable que estoy atascado. Tengo una zona para gestionar clientes. Entre otras cosas hay un selectpicker de provincia y otro de municipio. El primero me funciona, pero necesito que el de municipio cargue valores en base a lo que se elija en el primero.

Lo que quiero es que al cambiar el valor elegido de provincia, se envíe por ajax ese valor a la url /ajax/clientes.php llamando al caso selectMunicipio. ¿Sería correcto esto, o estoy haciendo algo mal?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$(document).ready(function(){
	$('#provincia').on('change',function(){
		var provinciaID = $(this).val();
		if(provinciaID){
			$.ajax({
				type:'POST',
				url:'../ajax/clientes.php?op=selectMunicipio',
				data:'id='+provinciaID,
				success:function(html){
					$("#municipio").html(r);
					$('#municipio').selectpicker('refresh');
				}
			});
		}
	});
});
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con select dependiente

Publicado por Juan (42 intervenciones) el 23/08/2017 14:34:24
Buenas Endika

En mi opinión te sobra el refresh del selectpicker, lo que tienes que actualizar es el valor del select, es decir, sería algo como $("#municipio").val(html(valor));

Habría que ver el PHP para ver si está todo correcto, aunque quizás te falte en la función AJAX decir si devuelves una cadena JSON o similares, pero esto para saberlo hay que ver como devuelves los valores desde el PHP.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

Problema con select dependiente

Publicado por kip (862 intervenciones) el 23/08/2017 15:13:40
Hola Juan, lastimosamente estas equivocado, el refresh es un metodo del plugin Bootstrap Select (https://silviomoreto.github.io/bootstrap-select/methods/#selectpickerrefresh) y sirve para actualizar la UI que este genera, se usa cuando se remueve, modifica o añade nuevos valores al select.

Tambien esto esta mal:

1
$("#municipio").val(html(valor));

Por que ? Pues porque val sera el valor del <select>, mas no su contenido que es lo que quieren hacer, tambien html() no es una funcion que este definida, ya que arriba estan haciendo referencia a html() de jQuery y en tu ejemplo no lo haces.

Endika, esta bien lo que estas haciendo a simple vista, añadiria tal vez el else en caso de que no exista un valor en el primer select que seria #provincia para que haga un empty a #municipio.

Te da algun error como lo tienes ahora ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con select dependiente

Publicado por Endika (14 intervenciones) el 24/08/2017 09:43:22
No consigo que funcione bien...

Ahora mismo me da un error. clientes.php es un datatable con listado de clientes. Actualmente con el código de los select, no carga nada. Entonces, he llamado directamente a la función listarc en el navegador y me muestra los clientes, pero me da el siguiente error:

Notice: Undefined index: provinciaID in /var/www/html/ntgestion/public_html/ajax/clientes.php on line 6

Paso el estado actual de mi script js y del php donde intento recuperar el valor enviado por ajax además de tener las funciones:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<script type="text/javascript">
$(document).ready(function(){
	$('#provincia').on('change',function(){
		var provinciaID = $(this).val();
		var data = provinciaID
		alert(provinciaID);
		if(provinciaID){
			$.ajax({
				type:'POST',
				url:'../ajax/clientes.php?op=selectMunicipio',
				data:{provinciaID= 'provinciaID'},
				dataType:'json',
				//data:'provinciaID='+provinciaID,
				success: function(response){
				//success:function(html){
 
						alert(provinciaID);
						$("#municipio").html(response);
						$('#municipio').selectpicker('refresh');
					}
				});
			}
		});
	});
</script>

Y así intento recuperar el contenido en PHP en el otro fichero (/ajax/clientes.php):
1
$provinciaID = $_POST['provinciaID'];
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

Problema con select dependiente

Publicado por kip (862 intervenciones) el 24/08/2017 14:24:07
Endika el error es claro, estas pasando mal el dato a tu archivo PHP, por que ? Fijate en el objeto que envias, el que das como valor a la propiedad data de la funcion $.ajax():

1
data:{provinciaID= 'provinciaID'}

Deberia ser al reves:

1
data:{'provinciaID' = provinciaID}

Colocando como clave el nombre y como valor el dato a enviar.

Intentalo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con select dependiente

Publicado por Endika (14 intervenciones) el 24/08/2017 14:39:41
Acabo de probar y nada... error Notice: Undefined index: provinciaID in /var/www/html/ntgestion/public_html/ajax/clientes.php on line 186 aún.

Ahora mismo mi código está así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<script type="text/javascript" src="scripts/clienteok.js"></script>
<script src="jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	$('#provincia').on('change',function(){
		//var provinciaID = $(this).val();
		var provinciaID = this.value;
		var data = provinciaID;
		alert(provinciaID);
		if(provinciaID){
			$.ajax({
				type:'POST',
				url:'../ajax/clientes.php?op=selecMunicipio',
				data:{'provinciaID' = provinciaID},
				//data:provinciaID={provinciaID : provinciaID},
				dataType:'json',
				contentType: "application/x-www-form-urlencoded",
				success: function(data){
				//success:function(html){
 
					alert(provinciaID);
 
					$("#municipio").html(response);
					$('#municipio').selectpicker('refresh');
					$('#municipio').selectpicker('refresh');
				}
				});
			}
		});
	});
</script>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

Problema con select dependiente

Publicado por kip (862 intervenciones) el 24/08/2017 14:42:36
Pero vaya error el mio ! Olvide decirte que el = esta erroneo en aquel objeto que envias !

1
{'provinciaID' = provinciaID}

No se usan iguales, fijate en como estructuras el objeto que envias a $.ajax(), seria:

1
{clave: 'valor'}

Con ':'

1
{'provinciaID' : provinciaID}

Ademas de eso, no entiendo porque defines var data = provinciaID y nunca usas esta variable, podrias alli armar el objeto y luego en la funcion ajax pasarlo:

1
var data = {'provinciaID': provinciaID}

1
data: data,

O simplemente no definirla, es un consejo nada mas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Problema con select dependiente

Publicado por xve (6546 intervenciones) el 24/08/2017 21:43:15
Hola Endika, tienes mal los cierres } y )... revisalo en la linea 27, veras que esta mal!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

Problema con select dependiente

Publicado por kip (862 intervenciones) el 25/08/2017 03:38:59
Xve donde ? Sabes yo he evaluado el codigo con http://jshint.com/ y no muestra ningun error mas que el = del objeto a asignar como valor en data, la linea 27 cierra el objeto enviado a ajax y la funcion misma, estoy mal ?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Problema con select dependiente

Publicado por xve (6546 intervenciones) el 25/08/2017 08:24:57
Perdón, me he equivocado... hablando en el chat con Endika me he dado cuenta... la linea 19 es un comentario y no me di cuenta... la contaba como una llave activa {

Disculpas!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con select dependiente

Publicado por Endika (14 intervenciones) el 25/08/2017 09:13:30
Gracias a la ayuda de xve y a un poco de inspiración ya está resuelto el asunto¡

Comparto la solución correcta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<script src="jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
		//$('#provincia').on('change',function(){
			$('#provincia').change(function(){
			var provinciaID = $(this).val();
			//var provinciaID = this.value;
			var data = {'provinciaID': provinciaID};
			alert(provinciaID);
			if(provinciaID){
				$.ajax({
					type:'POST',
					url:'../ajax/clientes.php?op=selectMunicipio',
					data: data,
					//data:provinciaID={provinciaID : provinciaID},
					dataType:'json',
					contentType: "application/x-www-form-urlencoded",
					success: function(data){
					//success:function(html){
 
						alert(data);
 
						$("#municipio").html(response);
						$('#municipio').selectpicker('refresh');
						$('#municipio').selectpicker('refresh');
					}
						});
							}
						});
								});
</script>

Y en el PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
case "selectMunicipio":
 
		require_once "../modelos/Municipios.php";
 
		$municipio = new Municipio();
		$provinciaID=$_POST['provinciaID'];
		echo $provinciaID;
		return $provinciaID;
		$rspta = $municipio->select();
 
		while ($reg = $rspta->fetch_object())
				{
					echo '<option value=' . $reg->id . '>' . $reg->municipio . '</option>';
				}
	break;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve

Problema con select dependiente

Publicado por xve (6546 intervenciones) el 25/08/2017 10:32:34
Gracias por compartirlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con select dependiente

Publicado por Endika (14 intervenciones) el 24/08/2017 14:46:59
He reemplazado pero nada, aparentemente no está haciendo el envío...

En el php en el case al que llama la url del ajax, tengo:
1
2
3
4
5
6
case "selectMunicipio":
 
require_once "../modelos/Municipios.php";
 
$municipio = new Municipio();
$provinciaID=$_POST['provinciaID'];
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

Problema con select dependiente

Publicado por kip (862 intervenciones) el 24/08/2017 15:05:33
Endika, verificaste con el DevTools(F12 en el navegador) que el envio no se haga ? El alert() que esta en la funcion asignada a success de $.ajax() no se muestra ?

No puedes probar directamente desde PHP aquello(el funcionamiento), ya que jamas estaras enviando nada por POST, debes probarlo desde la seccion HTML donde ocurre el evento que dispara la llamada a al servidor usando ajax, lo digo porque dices esto ' Entonces, he llamado directamente a la función listarc en el navegador y me muestra los clientes'.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con select dependiente

Publicado por Endika (14 intervenciones) el 24/08/2017 15:12:49
Buena observación. La llamada en el navegador al selecMunicipio la hice manualmente para ver si me imprimia la variable provinciaID del case selectMunicipio , y ahí en lugar de imprimirla md muestra lo de undefined index.

En el HTML solo funciona el alert previo a la función success... Es decir, tengo dos alerts en el código y solo saca uno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad