
Ajax y envío de variables mediante GET
Publicado por annx10 (8 intervenciones) el 03/09/2014 09:12:03
Muy buenas a todos.
En primer lugar, no llevo mucho tiempo desarrollando con Ajax, por lo que intuyo que el problema que estoy teniendo es algo muy básico que se me escapa, o eso creo.
He estado buscando información en google y en los temas que ya estaban publicados pero no he encontrado la solución al problema.
Estoy utilizando ajax para enviar datos de un formulario que tengo ubicado en una ventana modal mediante POST, interactuando con las respuestas que resultan del código php sin ningún problema... hasta ahora :(
El problema viene cuando en una de esas respuestas, construyo dentro de la ventana modal un texto con un enlace que contiene una serie de variables que se enviarían mediante GET al servidor. Mi idea era que al pulsar dicho enlace, tampoco se recargase la página, sino que se enviase de nuevo al servidor dichas variables por GET, se procesara la acción y con el resultado se cambiara el texto de la ventana modal mostrando la respuesta.
Por tanto, para poner en situación, el proceso es el siguiente:
1. El usuario indica su nombre de usuario y su contraseña en el formulario de la ventana modal, enviándose los datos mediante Ajax (Metodo post) al servidor. Se produce una situación determinada (el usuario es bloqueado) generando una respuesta y con ella cambio el contenido de la ventana modal, mostrando un mensaje que contiene un enlace con la siguiente estructura:
<a id='reenviar' href='/carpeta/archivo.php?usuario=user'>enlace</a>
2. Al hacer click en el enlace, tengo el siguiente código en mi archivo js para gestionar la operación:
$('#reenviar').click(function(ev) {
ev.preventDefault();
var url = $(this).attr('href');
var indice = url.indexOf('=');
var us = url.substring(indice+1);
$.get('/carpeta/archivo.php', {usuario: us}, function(resp){
$('.fallo').remove();
$('#login_form').after("<div>"+resp.mens+"</div>");
}, 'json');
});
En el archivo.php, hago una consulta a la base de datos con el usuario recibido por GET, y tras hacer una serie de operaciones, construyo un mensaje que devuelvo así:
echo json_encode(array('mens' => $mensaje));
El problema es que el procesamiento en el archivo php se hace correctamente, pero la página se recarga, mostrándome en el navegador el archivo.php al que apunta el enlace, con el mensaje que he construido, en vez de insertarlo en la ventana modal sin recargar. Cuando he enviado anteriormente los datos del formulario mediante post y he construido mensajes, éstos se han insertado correctamente en la ventana modal sin recargar :(
Viendo las explicaciones en algunas de las búsquedas que hice, vi otras opciones como indicar en el atributo href una #, recogiendo el nombre de usuario en otro atributo, como por ejemplo el name, para poder recoger en el archivo php el usuario sobre el que haré la consulta. Lo que no entiendo es porqué va a la url que indica el enlace si he puesto preventDefault(). ¿Qué estoy haciendo mal?
Siento el tamaño del post, y si me he dejado algo en el tintero o he explicado algo mal, decídmelo.
Un saludo, y muchas gracias de antemano.
En primer lugar, no llevo mucho tiempo desarrollando con Ajax, por lo que intuyo que el problema que estoy teniendo es algo muy básico que se me escapa, o eso creo.
He estado buscando información en google y en los temas que ya estaban publicados pero no he encontrado la solución al problema.
Estoy utilizando ajax para enviar datos de un formulario que tengo ubicado en una ventana modal mediante POST, interactuando con las respuestas que resultan del código php sin ningún problema... hasta ahora :(
El problema viene cuando en una de esas respuestas, construyo dentro de la ventana modal un texto con un enlace que contiene una serie de variables que se enviarían mediante GET al servidor. Mi idea era que al pulsar dicho enlace, tampoco se recargase la página, sino que se enviase de nuevo al servidor dichas variables por GET, se procesara la acción y con el resultado se cambiara el texto de la ventana modal mostrando la respuesta.
Por tanto, para poner en situación, el proceso es el siguiente:
1. El usuario indica su nombre de usuario y su contraseña en el formulario de la ventana modal, enviándose los datos mediante Ajax (Metodo post) al servidor. Se produce una situación determinada (el usuario es bloqueado) generando una respuesta y con ella cambio el contenido de la ventana modal, mostrando un mensaje que contiene un enlace con la siguiente estructura:
<a id='reenviar' href='/carpeta/archivo.php?usuario=user'>enlace</a>
2. Al hacer click en el enlace, tengo el siguiente código en mi archivo js para gestionar la operación:
$('#reenviar').click(function(ev) {
ev.preventDefault();
var url = $(this).attr('href');
var indice = url.indexOf('=');
var us = url.substring(indice+1);
$.get('/carpeta/archivo.php', {usuario: us}, function(resp){
$('.fallo').remove();
$('#login_form').after("<div>"+resp.mens+"</div>");
}, 'json');
});
En el archivo.php, hago una consulta a la base de datos con el usuario recibido por GET, y tras hacer una serie de operaciones, construyo un mensaje que devuelvo así:
echo json_encode(array('mens' => $mensaje));
El problema es que el procesamiento en el archivo php se hace correctamente, pero la página se recarga, mostrándome en el navegador el archivo.php al que apunta el enlace, con el mensaje que he construido, en vez de insertarlo en la ventana modal sin recargar. Cuando he enviado anteriormente los datos del formulario mediante post y he construido mensajes, éstos se han insertado correctamente en la ventana modal sin recargar :(
Viendo las explicaciones en algunas de las búsquedas que hice, vi otras opciones como indicar en el atributo href una #, recogiendo el nombre de usuario en otro atributo, como por ejemplo el name, para poder recoger en el archivo php el usuario sobre el que haré la consulta. Lo que no entiendo es porqué va a la url que indica el enlace si he puesto preventDefault(). ¿Qué estoy haciendo mal?
Siento el tamaño del post, y si me he dejado algo en el tintero o he explicado algo mal, decídmelo.
Un saludo, y muchas gracias de antemano.
Valora esta pregunta


0