web-dev-qa-db-ja.com

jQueryserializeはすべてのスペースをプラスに変換します

現在、シリアル化を使用するすべての場所で、次のように使用する必要があります。

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

それ以外の場合、フォームデータ内のスペースはすべて+で覆われます。これをデフォルトにすることができる設定はありますか?.

26
Mark Steggles

楽しみのために、一時変数を使用しない別の方法を次に示します。

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

$("#formToSerialize").serializeAndEncode();
3
russianmario

私も同じことをしなければなりませんでした。 Terryがescape()を使用して提供したソリューションは、機能しません。 =と&はエンコードされており(これは望ましくありません)、+はまだ存在しています。

私がしたことは、シリアル化するための独自の関数を作成することです。

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

デフォルトがあるとは思わないでください。文字列を これらの方法の1つ でエンコードする必要があります。

独自のプラグインを作成することもできますが、

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

$(myForm).serializeAndEncode();
0
Terry