jQuery: biểu mẫu serialize () và các tham số khác


114

Có thể gửi các phần tử biểu mẫu (tuần tự với .serialize()phương thức) và các tham số khác với một yêu cầu AJAX không?

Thí dụ:

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

Nếu không, cách tốt nhất để gửi biểu mẫu cùng với các thông số khác là gì?

Cảm ơn

Câu trả lời:


235

serialize() biến các giá trị biểu mẫu thành một chuỗi truy vấn hợp lệ một cách hiệu quả, như vậy bạn có thể chỉ cần thêm vào chuỗi:

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

7
@Falcon Ý bạn là dừa ở đây là gì?
Shafizadeh

làm thế nào tôi có thể thay đổi từ 1 tới biến
Slatan-ko

3
@Shafizadeh Nó là một vần điệu (rất nhiều - dừa)
Adam

Bạn có thể vui lòng cho biết tại sao ở đây không cần contentType không ?? Điều đó có được thêm vào theo mặc định không?
kernal lora

Có, url biểu mẫu được mã hóa là mặc định. Xem tài liệu jquery để biết thêm thông tin
Rory McCrossan

77

Ngoài ra, bạn có thể sử dụng form.serialize()với $.param(object)nếu bạn lưu trữ các tham số của mình trong một số biến đối tượng. Cách sử dụng sẽ là:

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

Xem http://api.jquery.com/jQuery.param để tham khảo thêm.


10
Tôi thích cái này. Nó có nghĩa là tôi không phải nhìn vào một chuỗi truy vấn xấu xí!
Greg Woods

4
Đây là cách tốt hơn, cho đến nay. Câu trả lời được chấp nhận là lộn xộn và không bao giờ được sử dụng trong bất kỳ ứng dụng sản xuất nào.
FastTrack

3
Nếu chúng ta đang nói về môi trường sản xuất, thì không nên sử dụng câu trả lời nào trong số này. Các formnên chứa tất cả thông tin (trong các trường ẩn nếu cần thiết) để nó có thể được tuần tự trong một cuộc gọi duy nhất. Bằng cách này nếu JS bị vô hiệu hóa hoặc không thành công, biểu mẫu gửi vẫn phải có an toàn dự phòng và bao gồm tất cả dữ liệu khi được gửi.
Rory McCrossan

9

Tôi không biết nhưng không có cách nào ở trên phù hợp với tôi, Sau đó, tôi sử dụng cái này và nó hoạt động:

Trong mảng được tuần tự hóa của biểu mẫu, nó được lưu trữ dưới dạng cặp giá trị khóa

Chúng tôi đã đẩy giá trị mới hoặc các giá trị ở đây trong biến biểu mẫu và sau đó chúng tôi có thể chuyển trực tiếp biến này ngay bây giờ.

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

1

Nếu bạn muốn gửi dữ liệu bằng cách tuần tự hóa biểu mẫu, bạn có thể thử cách này

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

truyền giá trị của tham số như thế này

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

và như thế.


0

Theo câu trả lời của Rory McCrossan , nếu bạn muốn gửi một mảng số nguyên (gần như cho .NET), đây là mã:

// ...

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

Bạn có thể tạo một biểu mẫu hỗ trợ bằng cách sử dụng jQuery với nội dung của một biểu mẫu khác và sau đó thêm các tham số khác của biểu mẫu đó để bạn chỉ phải tuần tự hóa nó trong lệnh gọi 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

Tôi khắc phục sự cố với dưới tuyên bố; gửi dữ liệu với url giống GET methode

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

và nhận giá trị với $_REQUEST['value']HOẶC$_GET['id']


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.