$(этот.)serialize () - как добавить значение?
в настоящее время у меня есть следующее:
$.ajax({
type: 'POST',
url: this.action,
data: $(this).serialize(),
});
это прекрасно работает, однако я хотел бы добавить значение к данным, поэтому я попытался
$.ajax({
type: 'POST',
url: this.action,
data: $(this).serialize() + '&=NonFormValue' + NonFormValue,
});
но это не правильно пост. Любые идеи о том, как вы можете добавить элемент в строку сериализации? Это глобальная переменная страницы, которая не является определенной формой.
7 ответов:
вместо
data: $(this).serialize() + '&=NonFormValue' + NonFormValue,вы, вероятно, хотите
data: $(this).serialize() + '&NonFormValue=' + NonFormValue,вы должны быть осторожны, чтобы URL-кодировать значение
NonFormValueесли он может содержать любые специальные символы.
В то время как ответ Мэтта Б будет работать, вы также можете использовать
.serializeArray()чтобы получить массив из данных формы, изменять его и использоватьjQuery.param()чтобы преобразовать его в url-кодированную форму. Таким образом, jQuery обрабатывает сериализацию ваших дополнительных данных для вас.var data = $(this).serializeArray(); // convert form to array data.push({name: "NonFormValue", value: NonFormValue}); $.ajax({ type: 'POST', url: this.action, data: $.param(data), });
Сначала добавьте элемент, а затем сериализуйте:
$.ajax({ type: 'POST', url: this.action, data: $.extend($(this), {'NonFormValue': NonFormValue}).serialize() });
во-первых, не стоит
data: $(this).serialize() + '&=NonFormValue' + NonFormValue,быть
data: $(this).serialize() + '&NonFormValue=' + NonFormValue,и во-вторых, вы можете использовать
url: this.action + '?NonFormValue=' + NonFormValue,или если действие уже содержит какие-либо параметры
url: this.action + '&NonFormValue=' + NonFormValue,
Не забывайте, что вы всегда можете сделать:
<input type="hidden" name="NonFormName" value="NonFormValue" />в своем истинном облике, что может быть лучше для вашего кода, в зависимости от случая.
вы можете написать дополнительную функцию для обработки данных формы, и вы должны добавить свои неформатные данные в качестве значения данных в форме.вот пример:
<form method="POST" id="add-form"> <div class="form-group required "> <label for="key">Enter key</label> <input type="text" name="key" id="key" data-nonformdata="hai"/> </div> <div class="form-group required "> <label for="name">Ente Name</label> <input type="text" name="name" id="name" data-nonformdata="hello"/> </div> <input type="submit" id="add-formdata-btn" value="submit"> </form>затем добавьте этот jquery для обработки формы
<script> $(document).onready(function(){ $('#add-form').submit(function(event){ event.preventDefault(); var formData = $("form").serializeArray(); formData = processFormData(formData); // write further code here----> }); }); processFormData(formData) { var data = formData; data.forEach(function(object){ $('#add-form input').each(function(){ if(this.name == object.name){ var nonformData = $(this).data("nonformdata"); formData.push({name:this.name,value:nonformData}); } }); }); return formData; }
мы можем сделать так:
data = $form.serialize() + "&foo=bar";например:
var userData = localStorage.getItem("userFormSerializeData"); var userId = localStorage.getItem("userId"); $.ajax({ type: "POST", url: postUrl, data: $(form).serialize() + "&" + userData + "&userId=" + userId, dataType: 'json', success: function (response) { //do something } });
Comments