やったこと

webサービスを作るときに考えたことを垂れ流します

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'];

以上。