27

目前,在我使用序列化的任何地方,我都必须像这样使用它:

.serialize().replace(/\+/g,'%20');

否则表单数据中的任何空格都将被转换为+。是否有可以将其设为默认值的设置。

4

3 回答 3

4

为了好玩,这里有一个不使用临时变量的替代方法:

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

$("#formToSerialize").serializeAndEncode();
于 2015-04-28T14:25:56.970 回答
1

我不得不做同样的事情。特里使用 escape() 给出的解决方案不起作用。= 和 & 正在被编码(我们不希望这样)并且 + 仍然存在。

我所做的是创建自己的函数来序列化:

var QueryString = "";
$(selector).each(function(index) {
    if(QueryString != "") QueryString += "&";
    QueryString += $(this).get(0).id + "=" + encodeURIComponent( $(this).val() );
});
于 2013-12-19T17:08:08.260 回答
-1

不要相信有默认值,您需要以其中一种方式对字符串进行编码。

虽然您可以创建自己的插件:

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

$(myForm).serializeAndEncode();
于 2012-06-14T01:50:19.157 回答