ホームページ  >  記事  >  バックエンド開発  >  JSON値の転送とPHPの受信のいくつかの状況

JSON値の転送とPHPの受信のいくつかの状況

韦小宝
韦小宝オリジナル
2018-05-28 13:53:563348ブラウズ

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関連関数の使用例の詳細な説明

PHP JSON

PHP JSONの中国語文字化けコードの解決策について議論する詳細な説明

以上がJSON値の転送とPHPの受信のいくつかの状況の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。