【发布时间】:2023-03-19 10:50:01
【问题描述】:
目前,无论我在哪里使用序列化,我都必须像这样使用它:
.serialize().replace(/\+/g,'%20');
否则表单数据中的任何空格都将被转换为+。是否有可以将其设为默认值的设置。
【问题讨论】:
标签: jquery serialization space
目前,无论我在哪里使用序列化,我都必须像这样使用它:
.serialize().replace(/\+/g,'%20');
否则表单数据中的任何空格都将被转换为+。是否有可以将其设为默认值的设置。
【问题讨论】:
标签: jquery serialization space
为了好玩,这里有一个不使用临时变量的替代方法:
$.fn.serializeAndEncode = function() {
return $.map(this.serializeArray(), function(val) {
return [val.name, encodeURIComponent(val.value)].join('=');
}).join('&');
};
$("#formToSerialize").serializeAndEncode();
【讨论】:
我不得不做同样的事情。 特里使用 escape() 给出的解决方案不起作用。 = 和 & 正在被编码(我们不希望这样)并且 + 仍然存在。
我所做的是创建自己的序列化函数:
var QueryString = "";
$(selector).each(function(index) {
if(QueryString != "") QueryString += "&";
QueryString += $(this).get(0).id + "=" + encodeURIComponent( $(this).val() );
});
【讨论】:
不要相信有默认值,您需要将字符串编码为one of these ways。
虽然您可以创建自己的插件:
jQuery.fn.serializeAndEncode = function() {
return escape(this.serialize());
}
$(myForm).serializeAndEncode();
【讨论】:
escape。它已 [弃用多年](developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… 并应替换为 encodeURIComponent 就像在 Matt Roy 的示例中一样。