jQuery: форма serialize () и другие параметры


115

Можно ли отправлять элементы формы (сериализованные с помощью .serialize()метода) и другие параметры с помощью одного запроса AJAX?

Пример:

$.ajax({
    type : 'POST',
    url : 'url',
    data : {
        $('#form').serialize(),
        par1 : 1,
        par2 : '2',
        par3: 232
    }
}

Если нет, то как лучше всего отправить форму вместе с другими параметрами?

Спасибо

Ответы:


236

serialize() эффективно превращает значения формы в допустимую строку запроса, поэтому вы можете просто добавить к строке:

$.ajax({
    type : 'POST',
    url : 'url',
    data : $('#form').serialize() + "&par1=1&par2=2&par3=232"
}

7
@ Сокол. Что ты имеешь в виду под кокосом ?
Шафизаде

как я могу изменить 1 на переменную
Slatan-ko

3
@Shafizadeh Это рифма (много - кокосовый орех)
Адам

Подскажите, пожалуйста, почему здесь не нужен contentType ?? Это добавлено по умолчанию?
kernal lora 02

Да, URL формы закодирован по умолчанию. Дополнительную информацию см. В документации jquery
Рори МакКроссан

77

В качестве альтернативы вы можете использовать form.serialize()with, $.param(object)если вы храните свои параметры в некоторой объектной переменной. Использование будет:

var data = form.serialize() + '&' + $.param(object)

См. Http://api.jquery.com/jQuery.param для получения дополнительной информации.


10
Мне нравится этот. Это означает, что мне не нужно смотреть на уродливую строку запроса!
Грег Вудс

4
Это, безусловно, лучший способ. Принятый ответ беспорядочный и никогда не должен использоваться в каком-либо производственном приложении.
FastTrack

3
Если мы говорим о производственной среде, то ни один из этих ответов не должен использоваться. Он formдолжен содержать всю информацию (в скрытых полях, если необходимо), чтобы ее можно было сериализовать за один вызов. Таким образом, если JS отключен или не работает, отправка формы по-прежнему должна иметь отказоустойчивый режим и включать все данные при отправке.
Рори МакКроссан

9

Я не знаю, но у меня ничего из вышеперечисленного не сработало. Затем я использовал это, и это сработало:

В сериализованном массиве формы он хранится как пара ключ-значение

Мы поместили новое значение или значения сюда в переменную формы, а затем мы можем передать эту переменную прямо сейчас.

var form = $('form.sigPad').serializeArray();
var uniquekey = {
      name: "uniquekey",
      value: $('#UniqueKey').val()
};
form.push(uniquekey);

1

Если вы хотите отправить данные с сериализацией формы, вы можете попробовать это

var form= $("#formId");
$.ajax({
    type: form.attr('method'),
    url: form.attr('action'),
    data: form.serialize()+"&variable="+otherData,
    success: function (data) {
    var result=data;
    $('#result').attr("value",result);

    }
});

0

передать значение такого параметра

data : $('#form_id').serialize() + "&parameter1=value1&parameter2=value2"

и так далее.


0

Следуя ответу Рори МакКроссана , если вы хотите отправить массив целых чисел (почти для .NET), это код:

// ...

url: "MyUrl",       //  For example --> @Url.Action("Method", "Controller")
method: "post",
traditional: true,  
data: 
    $('#myForm').serialize() +
    "&param1="xxx" +
    "&param2="33" +
    "&" + $.param({ paramArray: ["1","2","3"]}, true)
,             

// ...

-1

Вы можете создать дополнительную форму, используя jQuery с содержимым другой формы, а затем добавить эту форму в другие параметры, чтобы вам нужно было только сериализовать ее в вызове ajax.

function createInput(name,value){
    return $('<input>').attr({
        name: name,
        value: value
    });
}
$form = $("<form></form>");
$form.append($("#your_form input").clone());
$form.append(createInput('input_name', 'input_value'));
$form.append(createInput('input_name_2', 'input_value_2'));
....

$.ajax({
    type : 'POST',
    url : 'url',
    data : $form.serialize()
}

-1

Устраняю проблему с помощью нижнего утверждения; отправлять данные с URL-адресом того же метода GET

$.ajax({
    url: 'includes/get_ajax_function.php?value=jack&id='+id,
    type: 'post',
    data: $('#b-info1').serializeArray(),

и получить значение с $_REQUEST['value']ИЛИ$_GET['id']


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.