Каков наилучший способ отправки отключенных входов в рамках запроса JQuery AJAX?
У меня довольно сложная форма, которая обеспечивает проверку в реальном времени и обратную связь с пользователем, использующим его при вводе данных. Части формы могут быть отключены из-за формы "бизнес-логики" входов, но серверная сторона должна знать значение этих отключенных входов, чтобы выполнить некоторую проверку в запросах AJAX.
Я использовал JQuery для сериализации всей формы $(form).serialize() и отправки всех этих данных на сервер во время моих запросов AJAX, но в этих сериализованных данных будут отсутствовать любые входы, которые отключены. Итак, каков наилучший способ включить все данные формы (даже отключенные входы) с каждым запросом AJAX?
Моя текущая мысль состоит в том, чтобы прикрепить функцию к ajaxStart (обратный вызов), которая создала бы хэш-карту на стороне клиента для всех отключенных атрибутов входных данных формы, включила все входы, сериализовала, а затем вернула бы атрибут первоначальное значение. Но это кажется чересчур сложным, и мне нужно что-то более простое, что не было бы хрупким.
Ответы
Ответ 1
Попробуйте сделать что-то подобное, чтобы сериализовать форму:
$(function() {
$('input[type=button]').click( function() {
var form = $('form').serialize();
$('input[disabled]').each( function() {
form = form + '&' + $(this).attr('name') + '=' + $(this).val();
});
});
});
Тестирование HTML
<form action="/action">
<input type='text' disabled='disabled' value='hey' id='hey' name='hey' />
<input type='text' value='ho' id='ho' name='ho' />
<input type='text' value="hi" id='hi' name='hi' />
<input type='button' value="Serialize" />
</form>
Выход
ho=ho&hi=hi&hey=hey
Ответ 2
Если ваш сервер принимает JSON, вы можете создать объект JSON с jQuery (использовать операторы выбора jQuery для включения необходимых входных тегов), а затем отправить его на сервер как объект - более подробную информацию здесь: http://encosia.com/2009/04/07/using-complex-types-to-make-calling-services-less-complex/.
В принципе, сделайте что-нибудь вроде этого:
var formInputs = { };
$('input[type=text]').each(function() {
formInputs[this.id] = this.value;
});
Ответ 3
Части формы могут быть отключены из-за формы "бизнес-логика" входов
Вы можете использовать атрибут "readonly", чтобы отключить эти поля ввода. Сделайте следующее:
<input type="text" readOnly="readOnly" />
Атрибут readonly указывает, что поле ввода должно быть доступно только для чтения. Поле только для чтения не может быть изменено. Однако пользователь может выполнить вкладку, выделить его и скопировать текст из него.
from: HTML-вход readonly Атрибут
Поле только для чтения также может быть отправлено на сервер в виде строки запроса.
Ответ 4
Ну, еще один вариант - просто добавить скрытое поле со значением, которое вы не отправили на сервер.
Не забудьте использовать другой (фиктивный) идентификатор для тега, который вы отключите, чтобы избежать конфликта.
Ответ 5
отправить отключенное значение в конец, используя .serilize() через форму submit, используя jquery для ajax,
<HTML>
<HEAD>
<script>
$(document).ready(function(){
$("#submid").click(function() { // loginForm is submitted
$('#ayyappa').removeAttr('disabled');
$.ajax({
url: "urls",
data:{
"sel_opt":$("#ayyappa").attr("value"),
}
}); // ajax
$("#Number").attr("disabled", "disabled");
});//click
});
</script>
</HEAD>
<BODY><input type='text' id="ayyappa" name='ayyappa' value="ayyappa" disabled>
</BODY>
</HTML>