Отправка формы 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">