$ (this).serialize() - Как добавить значение?

в настоящее время у меня есть следующее:

$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize(),
});

Это прекрасно работает, однако я хотел бы добавить значение к данным, поэтому я попробовал

$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize() + '&=NonFormValue' + NonFormValue,
});

Но это не верно. Любые идеи о том, как добавить элемент в строку сериализации? Это глобальная переменная страницы, которая не является конкретной.

Ответ 1

Вместо

 data: $(this).serialize() + '&=NonFormValue' + NonFormValue,

вы, вероятно, захотите

 data: $(this).serialize() + '&NonFormValue=' + NonFormValue,

Вы должны быть осторожны с URL-кодированием значения NonFormValue, если он может содержать любые специальные символы.

Ответ 2

В то время как матовый b ответ будет работать, вы также можете использовать .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),
});

Ответ 3

Сначала добавьте элемент, а затем сериализуйте:

$.ajax({
    type: 'POST',
    url: this.action,
    data: $.extend($(this), {'NonFormValue': NonFormValue}).serialize()
});

Ответ 4

во-первых, не стоит

data: $(this).serialize() + '&=NonFormValue' + NonFormValue,

будет

data: $(this).serialize() + '&NonFormValue=' + NonFormValue,

а во-вторых, вы можете использовать

url: this.action + '?NonFormValue=' + NonFormValue,

или если действие уже содержит какие-либо параметры

url: this.action + '&NonFormValue=' + NonFormValue,

Ответ 5

Не забывайте, что вы всегда можете:

<input type="hidden" name="NonFormName" value="NonFormValue" />

в вашей фактической форме, которая может быть лучше для вашего кода в зависимости от случая.

Ответ 6

Вы можете написать дополнительную функцию для обработки данных формы, и вы должны добавить ваши данные неформации в качестве значения данных в форме. Пример:

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