#javascript #jquery #ajax
#javascript #jquery #ajax
Вопрос:
У меня есть этот код, который работает, но жестко закодирован.
$(document).ready(function(){
$('form').live('submit', function(){
var title = this.elements.title.value;
var owner = this.elements.owner.value;
var users = this.elements.users.value;
var groups = this.elements.groups.value;
var begin_date = this.elements.from.value;
var end_date = this.elements.to.value;
var anchor = this.elements.anchor.value;
var type = $(this).find('input:radio[name="ctype"]:checked').val() || '';
var aform = $('form[name="create_form"]');
Мне нужно aform
для последующего вложенного вызова Ajax.
Вопрос
Как мне сконструировать aform
, чтобы это не было жестко закодировано? На странице много форм.
Он должен содержать
var title = this.elements.title.value;
var owner = this.elements.owner.value;
var users = this.elements.users.value;
var groups = this.elements.groups.value;
var begin_date = this.elements.from.value;
var end_date = this.elements.to.value;
var anchor = this.elements.anchor.value;
var type = $(this).find('input:radio[name="ctype"]:checked').val() || '';
и позже должен работать с вложенным вызовом Ajax.
$.ajax({
type: "GET",
url: "/cgi-bin/ajax.pl",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: aform.serialize(),
Комментарии:
1. Я не понимаю, о чем вы спрашиваете. Что вы подразумеваете под «сконструировать
aform
«?2. @RoToRa :
aform
теперь содержит информацию о форме из формыname="create_form"
. Это та же информация, которую я собираю выше, используяthis
. Как мне обернуть множествоelement
извлечений в объект, с которым можно использоватьdata: aform.serialize(),
?3. Я все еще не понимаю. Если
$('form[name="create_form"]')
это то же самое, что и$(this)
, почему вы его не используете? Может быть, вы ищете.serializeArray()
?4. @RoToRa : Это очень хороший вопрос! На самом деле, вы только что решили проблему =) если вы опубликуете
var aform = $(this);
, то я могу закрыть =)
Ответ №1:
var aform = $(this);
(по просьбе Сандры 🙂
Ответ №2:
Вам не нужно делать все это самостоятельно. В самом Jquery есть плагин формы, который отправляет форму через ajax. Это объясняется само собой.
Комментарии:
1. Можно ли это сделать с помощью имени формы вместо идентификатора формы? Идентификаторы формы генерируются автоматически, и я не знаю этого заранее. Но я знаю названия форм.
Ответ №3:
Вот простой пример преобразования некоторых элементов формы в объект JSON — хотя предложение Абдула Кадера лучше, если вы хотите сделать это только для отправки данных в формате JSON.
<form method="post" action="" id="example">
<p><label>Name<br><input type="text" name="name" value="Bob"></p>
<p><label>Happy<br><input type="checkbox" name="happy" checked></p>
<p><textarea name="information">Some text "data" here!</textarea>
</form>
<div id="exampleOutput">
</div>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function exampleFormData() {
var formData;
var jsonString = "({";
var jsonCount = 0;
// This will add each input to a JSON string
$("#example input, #example textarea").each( function () {
if (jsonCount > 0) {
jsonString = ", "
}
var key = this.name;
var value = this.value;
jsonString = key ': "' value.replace(/"/g, '\"') '"';
jsonCount ;
});
jsonString = "})"
// This converts the string into a JSON object
formData = eval(jsonString);
// Now you can use the formData JSON object...
$("#exampleOutput").html(formData.name " " formData.happy " " formData.information);
}
exampleFormData();
</script>
Комментарии:
1. Разве это не то же самое, что
.serializeArray()
, только более небезопасно?2.
aform
В моем случае это просто строка JSON? Могу ли я затем использовать функцию encode JSON для ее создания?