postメッセージで空の配列を送信してくれない
javascriptでクライアント→サーバにpostメッセージを送信しようとしたら、「空の配列」を送信してくれなくて困った。
以下のようにしてajaxでpostメッセージを送信したんだけど、「test1」「test2」「test4」のデータはメッセージに含まれていたけど、「test3」のデータがメッセージに含まれていなかった(ブラウザは Chrome ver.41)。
//クライアント側コード var reqdata = new Object(); var test1 = 0; var test2 = ""; var test3 = new Array(); var test4 = null; reqdata["test1"] = test1; reqdata["test2"] = test2; reqdata["test3"] = test3; reqdata["test4"] = test4; $.ajax({ type: 'POST', url: 'hoge', dataType: 'json', cache: false, data:reqdata }).done(function(data, textStatus, jqXHR) { console.log("success"); }).fail(function(jqXHR, textStatus, errorThrown) { console.log("fail"); });
//サーバ側受信内容 [data] => Array ( [test1] => 0 [test2] => [test4] => )
仕方がないので、以下のようにして配列が空だった場合""を入れるようにしたら、test3がpostメッセージとして送信されるようになった。
//クライアント側コード var test1 = 0; var test2 = ""; var test3 = new Array(); var test4 = null; if (test3.length == 0){ test3 = ""; }
※P.S.
サーバ側PHPで以下のように(array)でキャストしてあげる方法もあるみたい。これをすると"test3"が省略されずにちゃんと「空の配列」として扱ってくれるようになる。
$_POST['test3'] = (array)$_POST['test3'];
以上。