LoginSignup
5
4

More than 5 years have passed since last update.

パラメータのシリアライズ(deep か shallow か)

Last updated at Posted at 2014-03-30

jQueryの小ネタです。

浅いシリアライズと深いシリアライズ

jQuery の $.param() には、2通りのシリアライズの形式があります。

$.param(obj [, traditional])

jQuery1.4 以降は シリアライズの方法を第2引数(オプション)で指定可能です。

jQuery.param()

traditional
Type: Boolean
A Boolean indicating whether to perform a traditional "shallow" serialization.

「従来の"浅い"シリアライズを行うかどうかを指定する」引数で、デフォルトではfalseです。
true にすると、1階層までの値をシリアライズし、falseにすると再帰的に "深く" までシリアライズします。

上記リンクと同じデータで例を示します。

$.param({a: [2, 3, 4]}); // "a[]=2&a[]=3&a[]=4"
$.param({a: [2, 3, 4]}, true); // "a=2&a=3&a=4"

$.param({a: {b: 1, c: 2}, d: [3, 4, {e: 5}]});
// "a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5"
$.param({a: {b: 1, c: 2}, d: [3, 4, {e: 5}]}, true);
// "a=[object+Object]&d=3&d=4&d=[object+Object]"

Ajaxでパラメータを送信する場合、サーバ側がdeepな形式に対応していない場合はtraditionalにtrueを指定する必要があります。
(私は最初これに気づかないで、仕方なく文字列に置換かけて一時しのぎしていました)

注意

jQuery 1.8 以降、\$.param() は jQuery.ajaxSettings.traditional の値を使用しないので、$.param() で明示的に traditional の値を指定したほうが良いそうです。

参考リンク

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4