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
@ ฟอลคอนคุณหมายถึงมะพร้าวที่นี่?
Shafizadeh

ฉันจะเปลี่ยน 1 เป็นตัวแปรได้อย่างไร
Slatan-ko

3
@Shafizadeh มันสัมผัส (มาก - มะพร้าว)
อดัม

คุณช่วยบอกได้ไหมว่าทำไมที่นี่ไม่ต้องการ contentType ?? มีการเพิ่มโดยค่าเริ่มต้นหรือไม่?
kernal lora

ใช่ฟอร์ม url ที่เข้ารหัสเป็นค่าเริ่มต้น ดูเอกสาร jquery สำหรับข้อมูลเพิ่มเติม
Rory McCrossan

77

หรือคุณสามารถใช้form.serialize()กับ$.param(object)ถ้าคุณเก็บพารามิเตอร์ของคุณไว้ในตัวแปรออบเจ็กต์บางตัว การใช้งานจะเป็น:

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

ดูhttp://api.jquery.com/jQuery.paramสำหรับข้อมูลอ้างอิงเพิ่มเติม


10
ฉันชอบอันนี้ หมายความว่าฉันไม่ต้องดูข้อความค้นหาที่น่าเกลียด!
Greg Woods

4
นี่เป็นวิธีที่ดีกว่า คำตอบที่ยอมรับนั้นยุ่งเหยิงและไม่ควรใช้ในแอปพลิเคชันการผลิตใด ๆ
FastTrack

3
หากเรากำลังพูดถึงสภาพแวดล้อมการผลิตก็ไม่ควรใช้คำตอบเหล่านี้ formควรมีข้อมูลทั้งหมด (ในสาขาที่ซ่อนอยู่ถ้าจำเป็น) เพื่อที่จะสามารถต่อเนื่องในสายเดียว ด้วยวิธีนี้หาก JS ถูกปิดใช้งานหรือล้มเหลวการส่งแบบฟอร์มควรมีความปลอดภัยและรวมข้อมูลทั้งหมดเมื่อส่ง
Rory McCrossan

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

ต่อไปนี้Rory McCrossanคำตอบถ้าคุณต้องการที่จะส่งอาร์เรย์ของจำนวนเต็ม (เกือบสำหรับ 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

ฉันแก้ไขปัญหาด้วย under statement; ส่งข้อมูลด้วย url GET methode เดียวกัน

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

และรับความคุ้มค่าด้วย$_REQUEST['value']OR$_GET['id']


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.