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

115

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

Пример:

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

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

Спасибо

KenavR
источник

Ответы:

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 для получения дополнительной информации.

kliszaq
источник
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);

    }
});
4302836
источник
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']

Азиз Фазли
источник
-1

Вы также можете использовать функцию serializeArray, чтобы сделать то же самое.

Суреш Праджапат
источник