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.
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 sin ningún problema.
El problema viene cuando en una de esas respuestas, construyo dentro de esa 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 al servidor los datos, se procesara la acción y se cambiara el texto de la ventana modal mostrando la respuesta.
Por tanto, para poneros 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 y 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 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 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 saber qué usuario tengo que indicar en la petición de ajax. 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.