jQuery: форма серіалізації () та інших параметрів


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
@Falcon Що ти тут маєш на увазі кокосовий горіх ?
Шафізаде

як я можу змінити 1 на змінну
Slatan-ko

3
@Shafizadeh Це рифма (багато - кокос)
Адам

Скажіть, будь ласка, чому тут не потрібен contentType ?? Це додано за замовчуванням?
kernal lora

Так, типовим URL-адресом форми є закодований. Додаткову інформацію дивіться у документації на jquery
Rory McCrossan

77

Як альтернативу можна використовувати form.serialize()з , $.param(object)якщо ви зберігаєте ваш Params в деяких змінному об'єкті. Використання було б:

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.