PHP 開発では、json と呼ばれる データ型 に遭遇します。この型は配列に似ていますが、配列ではありません。今日は、PHP が json 型のデータを受け取る方法について説明します。 PHP が json をどのように処理するかを見てみましょう。
Chrome のバックエンド ネットワークを使用して、JQuery の $.ajax() を通じて JSON データが PHP にポストされるときのいくつかの状況を分析しました:
PHP の $_POST および $_REQUEST を通じて JSON データを取得できない、つまり
$json = $_POST['json']; // empty($json) 为1
(注: PHP はデフォルトで application/x-www.form-urlencoded の標準データ型のみを認識します。したがって、text/xml、soap、application/octet-stream などのコンテンツは解析できません。$_POST 配列を使用すると失敗します。 )
ケース 1:
js は属性 contentType: "application/json; charset=utf-8" を追加しません、
var submit_sync = function() { $.ajax({ type: "post", url: 'add-post-json.php', async: false, // 使用同步方式 // 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14... // 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"} data: JSON.stringify({ a: parseInt($('input[name="a"]').val()), b: parseInt($('input[name="b"]').val()), now: new Date().getTime() // 注意不要在此行增加逗号 }), dataType: "json", success: function(data) { $('#result').text(data.result); } // 注意不要在此行增加逗号 }); }
$GLOBALS['HTTP_RAW_POST_DATA'] を使用した後に取得される、つまり
$json = $GLOBALS['HTTP_RAW_POST_DATA']; // empty($json) 为 1
file_get_contents("php://input") を使用すると、データを取得できます、つまり
$json = file_get_contents("php://input"); // empty($json) 为 0
2:
属性 contentType を追加します: "application/json; charset=utf-8",
var submit_sync = function() { $.ajax({ type: "post", url: 'add-post-json.php', async: false, // 使用同步方式 // 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14... // 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"} data: JSON.stringify({ a: parseInt($('input[name="a"]').val()), b: parseInt($('input[name="b"]').val()), now: new Date().getTime() // 注意不要在此行增加逗号 }), contentType: "application/json; charset=utf-8", dataType: "json", success: function(data) { $('#result').text(data.result); } // 注意不要在此行增加逗号 }); }
$GLOBALS['HTTP_RAW_POST_DATA'] を使用してデータを取得します (つまり、
$json = $GLOBALS['HTTP_RAW_POST_DATA']; // empty($json) 为 0)
file_get_contents("php://input"); を使用してデータを取得します。つまり、
$json = file_get_contents("php://input"); // empty($json) 为 0
(注: php://input を使用すると、POST の生データを読み取ることができます。$HTTP_RAW_POST_DATA と比較して、より多くのメモリが必要になります。問題点 ストレスが少なく、特別な php.ini 設定は必要ありません。 php://input は enctype="multipart/form-data" には使用できません)
以上がこの記事の内容です。誰もが助けをもたらすことができます。
関連する推奨事項:
PHP JSONの中国語文字化けコードの解決策について議論する詳細な説明
以上がJSON値の転送とPHPの受信のいくつかの状況の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。