2012-06-14 30 views
24

Hiện nay, ở khắp mọi nơi tôi sử dụng serialize tôi phải sử dụng nó như thế này:jQuery serialize chuyển đổi tất cả không gian để cộng

.serialize() thay thế (/ +/g, '% 20');.

nếu không thì bất kỳ khoảng trống nào trong dữ liệu biểu mẫu sẽ được chuyển thành + 's. Có cài đặt nào có thể đặt cài đặt này làm mặc định hay không.

Trả lời

0

Đừng tin rằng có mặc định, bạn sẽ cần phải mã hóa chuỗi trong one of these ways.

Mặc dù bạn có thể tạo plugin của riêng bạn:

jQuery.fn.serializeAndEncode = function() { 
    return escape(this.serialize()); 
} 

$(myForm).serializeAndEncode(); 
+2

Xin đừng sử dụng 'thoát '. Nó đã được [không dùng nữa trong nhiều năm] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#escape_and_unescape_functions (Obsoleted_above_JavaScript_1.5) và nên được thay thế bằng 'encodeURIComponent' như trong Ví dụ của Matt Roy – Husky

1

tôi phải làm điều tương tự. Giải pháp Terry đưa ra, với lối thoát(), không hoạt động. Các = và & đang nhận được mã hóa (chúng tôi không muốn điều đó) và + vẫn còn đó.

Những gì tôi đã làm là tạo ra chức năng của riêng tôi để serialize:

var QueryString = ""; 
$(selector).each(function(index) { 
    if(QueryString != "") QueryString += "&"; 
    QueryString += $(this).get(0).id + "=" + encodeURIComponent($(this).val()); 
}); 
3

Đối với niềm vui, đây là một sự thay thế mà không sử dụng một biến tạm thời:

$.fn.serializeAndEncode = function() { 
    return $.map(this.serializeArray(), function(val) { 
     return [val.name, encodeURIComponent(val.value)].join('='); 
    }).join('&'); 
}; 

$("#formToSerialize").serializeAndEncode(); 
+0

Đây chính xác là những gì tôi đã làm một mình. –

Các vấn đề liên quan