Chạy vào một chút đầu trầy xước đi qua một đối tượng jQuery đến yêu cầu $.ajax()
làm dữ liệu. Rõ ràng $.ajax()
xử lý các đối tượng thành chuỗi truy vấn bằng cách sử dụng $.param()
, nhưng $.param()
không thể tuần tự hóa đúng dữ liệu từ phần tử chọn nhiều. Thay vào đó, nó chỉ gửi giá trị đầu tiên.
Các docs for $.param()
nhà nước:
Tạo một đại diện tuần tự của một mảng, một đối tượng đơn giản, hoặc một đối tượng jQuery phù hợp để sử dụng trong một chuỗi truy vấn URL hoặc yêu cầu Ajax. Trong trường hợp đối tượng jQuery được chuyển, nó phải chứa các phần tử đầu vào với các thuộc tính tên/giá trị.
Vì điều này, serialize()
chỉ hoạt động tốt nhưng $.param()
không thành công. Đây có phải là lỗi với $.param()
hoặc tôi có thiếu thứ gì đó ở đây không?
Vui lòng, tôi là không tìm kiếm giải pháp. Như tôi đã nói, tôi chỉ có thể sử dụng serialize()
như một giải pháp thay thế trước khi chuyển dữ liệu đến $.ajax()
. Câu hỏi mà tôi đang hỏi là về việc sử dụng thích hợp $.param()
và liệu đây có phải là lỗi hay không.
Xem ví dụ bên dưới minh họa sự khác biệt trong kết quả. Chọn nhiều tùy chọn để xem sự khác biệt.
CẬP NHẬT: Tôi đã thêm một số đầu vào văn bản vào bản trình diễn bên dưới với tên text[]
vì chúng nên được mã hóa thành một mảng giống như chọn nhiều. Bật ra các giao dịch $.param()
với những điều này tốt - vì vậy vấn đề dường như liên quan cụ thể đến lựa chọn.
$('#submit').on('click', function() {
var param_query = $.param($('select, input'));
var serialize_query = $('select, input').serialize();
$('#param').html(param_query);
$('#serialize').html(serialize_query);
});
div {
margin: 10px 0;
}
#output,
i {
color: blue;
}
span {
color: #333;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select size="5" multiple name="colors[]">
<option value="red">red</option>
<option value="gold">gold</option>
<option value="green">green</option>
<option value="black">black</option>
<option value="White">white</option>
</select><br />
<input placeholder="Enter some text here..." name="text[]" /><br />
<input placeholder="Enter some text here..." name="text[]" /><br />
<button id="submit">Submit</button>
<div><b>QUERY STRING RESULTS:</b>
<br />
<i>$.param()</i>: <span id="param"></span>
<br />
<i>serialize()</i>: <span id="serialize"></span>
</div>
Có vẻ như một lỗi với tôi. Các tài liệu không đề cập đến bất cứ điều gì về đa lựa chọn. Nó có thể tạo ra nhiều tham số cho một mảng, do đó, có vẻ như nó sẽ làm điều tương tự cho một đa lựa chọn. – Barmar
Bạn có thể thử đăng bài này tại forum.jquery.com, xem họ phải nói gì về nó. – Barmar