2011-11-04 14 views
6

Estoy tratando de enviar un formulario de inicio de sesión simple a través de ajax en un sitio jQuery Mobile pero estoy teniendo problemas.Presentación de formulario AJAX en jQuery Mobile

Parece que cuando envío el formulario (a través de POST), los parámetros del formulario se están agregando a la url. No solo eso, borran la página anclada en la que estaba antes del envío del formulario.

Por ejemplo, estoy en la página localhost:8080/myapp/#sign_up

Entonces envíe el formulario haciendo que la url para convertirse: localhost:8080/myapp/[email protected]&pass=pass

Así que si golpeo errores de validación y haga clic en un botón de 'atrás', I don' volver a la página #sign_up.

¿Alguna idea?

Respuesta

15

Si controla el envío de formularios con un controlador de eventos personalizado submit que puede manejar la validación en la misma página:

//bind an event handler to the submit event for your login form 
$(document).on('submit', '#form_id', function (e) { 

    //cache the form element for use in this function 
    var $this = $(this); 

    //prevent the default submission of the form 
    e.preventDefault(); 

    //run an AJAX post request to your server-side script, $this.serialize() is the data from your form being added to the request 
    $.post($this.attr('action'), $this.serialize(), function (responseData) { 

     //in here you can analyze the output from your server-side script (responseData) and validate the user's login without leaving the page 
    }); 
}); 

Para detener jQuery Mobile se ejecute su propio sumbission AJAX de su formulario de poner esto en su etiqueta de formulario :

<form data-ajax="false" action="..."> 
+2

Cualquier comentario sobre el voto negativo sería apreciado. Solo me gustaría saber lo que estoy haciendo mal :) – Jasper

+0

, por lo que yo ;-) lo único que quizás sea que 'en vivo' está ahora en desuso y deberías usar 'on' en su lugar. tal vez incluso 'on/off' en secuencia para evitar eventos duplicados: http://stackoverflow.com/questions/9067259/ –

0

Si desea enviar un formulario y no utilizar Ajax (que es por defecto) debe agregar 'datos-ajax = "false"' a su forma de cadena:

<form data-ajax="false" action="test.php" method="POST"> 
+0

Esto es parte de la respuesta anterior, ¿te importa si te pregunto por qué lo has vuelto a publicar? – Jasper

3

¡La solución de Jaspers anterior funcionó para mí! Lo único que tuve que ajustar fue reemplazar .live con .submit (.live ahora está en desuso). Así que ahora es así:

$('#form_id').submit(function (e) { 

    //cache the form element for use in this function 
    var $this = $(this); 

    //prevent the default submission of the form 
    e.preventDefault(); 

    //run an AJAX post request to your server-side script, $this.serialize() is the data from your form being added to the request 
    $.post($this.attr('action'), $this.serialize(), function (responseData) { 

     //in here you can analyze the output from your server-side script (responseData) and validate the user's login without leaving the page 
    }); 
}); 
+0

Una nota sobre esto, si el formulario se extrae en el DOM como una página externa, esto se debe ejecutar después de que eso ocurra. Es por eso que sugeriría utilizar un controlador de eventos delegado, por lo que el controlador de eventos captará el evento, incluso si el formulario se agrega al DOM después de la carga de la página inicial. – Jasper

Cuestiones relacionadas