2016-05-18 10 views
3

私はPHPの関数にデータを送信し、次のjavascriptがありますなぜPHP json_encodeは空の配列を無視しますか?

<script> 
    var mydata = { 
        id:123, 
        name: 'mike', 
        orders: [] 
    }; 

    $.ajax({ 
     type: 'POST', 
     url: 'test.php', 
     data: {save_data:mydata}, 
     success: function(data) { 
        alert('php received: ' + data); 
     } 
    }); 
</script> 

を、私のtest.phpファイルには、次のコードが含まれます。私はPHPから受信することを期待何

<?php 
    if (isset($_POST['save_data'])) { 
      $json = json_encode($_POST['save_data']); 
      echo $json;  // just to check what has been received 
      exit(); 
    } 
?> 

は次のとおりです。 {"id":"123","name":"mike","orders":"[]"}

私が返すものは{"id":"123","name":"mike"} ですorders配列が出力から削除されていることに注意してください。それのための場所のホルダーなし。配列にダミーの要素を追加しようとしましたが、うまくいきました。

空の配列が含まれていても、jsonオブジェクトをそのまま受け取るにはPHPが必要です。

どうすればいいですか?

+0

var mydata = { id:123, name: 'mike', orders: [] }; 

変更を送信しますjsonとraw jsonを送信します。その後、PHPでuse file_get_contents( "php:// input")を使ってデータを取得できます –

+0

これはPHPではありません。実際のリクエストを確認してください - 空の配列がありません –

答えて

2

JSONオブジェクトはPHP内で作成されます。それ以前はフォームデータしかありません。

jQueryは、PHPにやさしいスタイルでフォームデータをエンコードします。

あなたがそれを与える場合:あなたがのためのキー=値のペアを取得

(それは意志パーセントエンコード[]が)

foo[]=1&foo[]=2&foo[]=3 

data: { foo: [1, 2, 3] } 

をそれはにそれを変換します各値はです。

空の配列がある場合、値はないため、キー=値のペアは得られません。

フォームのURLエンコード構文にPHPの拡張機能を使用して「空の配列」をエンコードする方法はありません。


次の2つの基本的なオプションがあります。

  1. は、事前に作成して、それが空の配列に記入したいどのようなデータ構造についてPHPを知らせます。
  2. それは、PHPのエラーではありませんクライアント
+0

jsonから渡されたプロパティと一致するPHPクラスがある場合は動作しますか?その場合、jsonから渡された値を使用してクラスのインスタンスをインスタンス化するようPHPに指示するにはどうすればよいですか? – Ahmad

0

にJSONを生成します。これは、Jqueryによって、サーバに送信するときに空の配列がigroneになる原因となります。だから、文字列のJSONへの注文 'キーで配列を解析しているのは前の代わりにURLエンコードとしてJSONデータを送信する、あなたは/アプリケーションなどのコンテンツ・タイプを設定することができます

var mydata = { 
       id:123, 
       name: 'mike', 
       orders: JSON.stringify([]) 
}; 
+1

それはちょうど '' [] ''文字列になります。また、この注文リストをサーバー側で解析する必要があります。 –

関連する問題