Usar Modal de twitter bootstrap

S

Pues no me entero yo de esto de Ajax....

He hecho lo siguiente....

<script>
	$("#cerrar1").click(function(){
		$("elemento").load("http://localhost/pfcdata/dispositivo_controller/alta_dispositivo", $('form.FormTipo').serialize());
	});
</script>

cuando cierro el modal pulso el boton close con id= "cerrar1" y ese codigo deberia de actualizarme el select cuyo id="elemento" no?

1 respuesta
S

#30 Buenas, estoy intentando hacerlo de la forma que me comentó elkaoD. A ver si fuera capaz, pero sino echaré un vistazo a lo que comentas.

elkaoD

#31 tienes una errata, te falta la # del id.

"#elemento"

Si me dieran 1€ por cada vez que me ha pasado eso... xD

1 respuesta
S

#33 Si yo tuviera que darte 1€ por cada consejo que me estas dando.... XD

Sigue sin funcionar, he probado con los siguientes códigos:

<script>
        $("a#cerrar1").click(function(){
                $("#elemento").load("http://localhost/pfcdata/dispositivo_controller/alta_dispositivo", $('form.FormTipo').serialize());
        });
</script>
<script>
        $("#cerrar1").click(function(){
                $("#elemento").load("http://localhost/pfcdata/dispositivo_controller/alta_dispositivo", $('form.FormTipo').serialize());
        });
</script>

Como lo que pulso es un botón cuya etiqueta es <a> pues se lo he añadido al selector cerrar1 por si era por eso. pero nada, sigue sin hacerme nada esa función. Cuando recargo la pagina manualmente aparece el registro correctamente. :(

2 respuestas
Gantorys

#34 Qué es lo que quieres hacer exactamente? Cargar una modal, meter un dato y después que se cargue un <select> con los datos que ya hay + el que has metido en la modal?

1 respuesta
S

#35 exacto, el select ya esta en la pagina principal, al cargar un modal y insertar un registro el select de la pagina principal debe tener los registros que ya tenia mas el que he insertado por el modal.

1 respuesta
Gantorys

#36 Yo utilizaría el append de jQuery entonces, y en la modal que se ejecute el código cuando le das a guardar, no cuando cierras.

1 respuesta
S

#37 De acuerdo, entonces me sirve directamente lo que tengo ya implementado no?

<script>
 $(function() {
//twitter bootstrap script
    $("button#submit1").click(function(){
        $.ajax({
        type: "POST",
        url: "http://localhost/pfcdata/dispositivo_controller/addTipoDispositivoModal",
        data: $('form.FormTipo').serialize(),
        success: function(msg){
        	$("#thanks").html(msg)
                $("#elemento").append(.............)
                $("#modal1").modal('hide');

        },
    error: function(){
        alert("failure");
        }
    });
});
});
</script>
Gantorys

Yo diría que sí

1 respuesta
S

#39 Voy a probarlo, aunque no sé si eso (en caso de que funcione),me añadirá al select cualquier elemento que yo intente insertar, esté ya en la BD o no.

1 respuesta
Gantorys

#40 eso lo tendrías que comprobar en el script (la url que le pasas al ajax) y devuelves los valores que quieras (JSON es tu amigo)

Algo así haría

php


return existe_el_registro ? array('success' => false) : array('success' => true, 'valor_elemento_nuevo' => $valor);

y en el success del $.ajax


success: function(response){
   if (response.success)
  {
     $('#elemento_select').append('<option value="'+response.valor_elemento_nuevo+'">'+ response.valor_elemento_nuevo +'</option>');
  }
}

Si vas a utilizar JSON como respuesta, agrega al $.ajax la propiedad dataType: 'json'

1 respuesta
S

#41 Esto se me complica demasiado :P

Primero voy a intentar que en el select me muestre el registro que aún no lo he conseguido y después intentaré que me muestre solo los registros que me ingresa en la BD

elkaoD

#34 pero desde la URL que estás mandado recibes el churro de <select> en forma HTML, verdad?

¿Qué te devuelve la URL cuando accedes normalmente sin AJAX? Comprueba que devuelve lo que quieres.

Si así no funciona ya me dejas con el culo torcido.

1 respuesta
S

#43 A ver, pongo en situación un poco porque no entiendo muy bien lo que quieres decir con el mensaje. Yo tengo una aplicación MVC. Cargo mi vista con el formulario correspondiente y el modal. El formulario contiene el select por tanto supongo que cuando dices que si recibo el select en forma de HTML, la respuesta es que si.

Referente a que me devuelve la URL cuando accedo sin AJAX, pues no se responderte esa pregunta. Yo a través del modal ingreso el nuevo registro en la BD si este no se encuentra, sino, me recarga el modal mandándome un mensaje que me dice que ya se encuentra el registro y me da la posibilidad de realizar otro registro o de cerrarlo. Mi objetivo es que cuando yo realice un registro y este tenga éxito, mi select fuera del modal contenga además ese nuevo registro que he ingresado a través de dicho modal.
Por eso te digo que la URL mientras estoy en la principal no cambia. Simplemente me muevo entre modals y eso no varia la URL a la que accedí.

Todo el contenido que tengo en los formularios suelo pasarlo vía POST. Por lo que la URL no lleva ningún contenido adicional que no sea la vista a la que me quiero mover.

1 respuesta
elkaoD

#44 creo que no entiendes lo que es AJAX ni lo que hace .load(). Con AJAX no puedes cargar una vista completa.

Leete la documentación (o no uses AJAX).

1 respuesta
S

#45 No quiero cargar una vista completa, para eso esta mi controlador. Lo que quiero es que haciendo uso de AJAX se actualice el select de mi pagina. En ello estoy leyendo documentación. Gracias de todas formas y cuando tenga algun conocimiento volveré al hilo para mostrar la solucion o preguntar las dudas que tenga :P

1 respuesta
elkaoD

#46 para dejarlo claro: .load() carga el HTML que recibe en el elemento jQuery donde se utiliza.

Si haces...

<script>
        $("#cerrar1").click(function(){
                $("#elemento").load("http://localhost/pfcdata/dispositiv...spositivo", $('form.FormTipo').serialize());
        });
</script>

Tu URL "http://localhost/pfcdata/dispositiv...spositivo" tiene que devolver el nuevo HTML que irá dentro de #elemento. Asumiendo que #elemento es tu <select> pues tendrá que devolver el churro con los nuevos <option> con los que quieras poblar el elemento.

De ahí mi pregunta de qué devuelve tu URL.

S

De acuerdo. Entonces no le estoy devolviendo el select, le estaba devolviendo como tu me has dicho la vista....

Me debo de crear un archivo html que me genere el select de nuevo pues...

1 respuesta
elkaoD

#48 un PHP/ASP o lo que sea, ¿no? Para que sea dinámico.

S

He usado HTML porque en mi controlador me he creado un método que llama a ese HTML. Ya he conseguido que funcione. Muchísimas gracias porque sin tu ayuda hubiera sido imposible...

Pongo el código que he utilizado por si a alguien le sirve de ayuda o le sucede algo similar a lo que me ocurría.

<script>
    $("#cerrar1").click(function(){
        $("#tipo_dispositivo").load("http://localhost/pfcdata/dispositivo_controller/dame_elementos", $('form.FormTipo').serialize());
    });
</script>

Aclarar un par de cosas:
1º el select que quería actualizar era el que tenia el selector #tipo_dispositivo, fallo mio el intentar meterlo en el selector #elemento.
2º Como ya he dicho antes dame_elementos es un método que me carga el html del select que pretendo actualizar.

Vuelvo a dar las gracias a elkaoD y a Gantorys por haber dedicado vuestro tiempo y haberme ayudado en lo posible.

2