Отправка формы AJAX в jQuery Mobile

Я пытаюсь отправить простую форму входа через ajax на сайте jQuery Mobile, но у меня возникли проблемы.

Кажется, что когда я отправляю форму (через POST), параметры формы добавляются в URL. Мало того, они стирают привязанную страницу, на которой я был до отправки формы.

Например, я на странице localhost:8080/myapp/#sign_up

Затем я отправляю форму, в результате чего URL становится: localhost:8080/myapp/?email=a@a.com&pass=pass

Поэтому, если я нажму на ошибки проверки и нажму кнопку "назад", я не вернусь к #sign_up стр.

Есть идеи?

3 ответа

Решение

Если вы обрабатываете отправку формы с пользовательским submit Обработчик событий вы можете обрабатывать проверки на той же странице:

//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
    });
});

Чтобы jQuery Mobile не запускал собственную AJAX-версию вашей формы, добавьте это в тег формы:

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

Решение Ясперса выше сработало для меня! Единственное, что мне пришлось настроить, - это заменить.live на.submit (.live сейчас не рекомендуется). Так что теперь это так:

$('#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
    });
});

Если вы хотите отправить форму и не использовать ajax (по умолчанию), вы должны добавить 'data-ajax="false" в строку формы:

 <form data-ajax="false" action="test.php" method="POST">
Другие вопросы по тегам