Home  >  Article  >  Backend Development  >  [PHP] Several situations of JSON value transfer and PHP reception

[PHP] Several situations of JSON value transfer and PHP reception

WBOY
WBOYOriginal
2016-08-08 09:27:301051browse

Using Chrome's backend network, we analyzed several situations when posting json data to PHP through JQuery's $.ajax():

  • Cannot get json data through $_POST and $_REQUEST in PHP, that is

    <span>$json</span> = <span>$_POST</span>['json'];  <span>//</span><span> empty($json) 为1</span>

Note: PHP only recognizes application/x-www.form-urlencoded standard data types by default. Therefore, content such as text/xml or soap or application/octet-stream cannot be parsed. If you use $ _POST array will fail to receive.

Scenario A:

In js there is no added attribute contentType: "application/json; charset=utf-8",

<span>var</span> submit_sync = <span>function</span><span>() {
    $.ajax({
        type: </span>"post"<span>,
        url: </span>'add-post-json.php'<span>,
        async: </span><span>false</span>, <span>//</span><span> 使用同步方式</span>
        <span>//</span><span> 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14...</span>
        <span>//</span><span> 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"}</span>
<span>        data: JSON.stringify({                  
            a: parseInt($(</span>'input[name="a"]'<span>).val()),
            b: parseInt($(</span>'input[name="b"]'<span>).val()),
            now: </span><span>new</span> Date().getTime() <span>//</span><span> 注意不要在此行增加逗号</span>
<span>        }),
        
        dataType: </span>"json"<span>,
        success: </span><span>function</span><span>(data) {
            $(</span>'#result'<span>).text(data.result);
        } </span><span>//</span><span> 注意不要在此行增加逗号</span>
<span>    });
}</span>
  • After using $GLOBALS['HTTP_RAW_POST_DATA'] cannot get the data, that is

<span>$json</span> = <span>$GLOBALS</span>['HTTP_RAW_POST_DATA'];  <span>//</span><span> empty($json) 为 1</span>
  • Use file_get_contents("php://input"); You can get the data, that is

<span>$json</span> = <span>file_get_contents</span>("php://input");   <span>//</span><span> empty($json) 为 0</span>

Situation B:

Add attribute contentType to js: "application/json; charset=utf-8",

<span>var</span> submit_sync = <span>function</span><span>() {
        $.ajax({
            type: </span>"post"<span>,
            url: </span>'add-post-json.php'<span>,
            async: </span><span>false</span>, <span>//</span><span> 使用同步方式</span>
            <span>//</span><span> 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14...</span>
            <span>//</span><span> 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"}</span>
<span>            data: JSON.stringify({                  
                a: parseInt($(</span>'input[name="a"]'<span>).val()),
                b: parseInt($(</span>'input[name="b"]'<span>).val()),
                now: </span><span>new</span> Date().getTime() <span>//</span><span> 注意不要在此行增加逗号</span>
<span>            }),
            <span>contentType: </span></span>"application/json; charset=utf-8"<span><span>,</span></span>
<em><span>            dataType: </span>"json"<span>,
            success: </span><span>function</span><span>(data) {
                $(</span>'#result'<span>).text(data.result);
            } </span><span>//</span><span> 注意不要在此行增加逗号</span>
<span>        });
    }</span></em>
  • After using $GLOBALS['HTTP_RAW_POST_DATA'] you can get the data, that is

<span>$json</span> = <span>$GLOBALS</span>['HTTP_RAW_POST_DATA'];  <span>//</span><span> empty($json) 为 0</span>
  • Use file_get_contents("php://input"); You can get the data, that is

<span>$json</span> = <span>file_get_contents</span>("php://input");   <span>//</span><span> empty($json) 为 0</span>
Note: php://input allows reading the raw data of POST. It puts less pressure on memory than $HTTP_RAW_POST_DATA and does not require any special php.ini settings. php://input cannot be used with enctype="multipart/form-data".

Case C:

Would you like to join the following

<span>header</span>('Content-Type:application/json;charset=utf-8');

It has no impact on the results of case A and case B.

Starting from version 5.2, PHP natively provides json_encode() and json_decode() functions, the former is used for encoding, and the latter is used for decoding. The following blog is very detailed, mark!

Using JSON in PHP language: http://www.ruanyifeng.com/blog/2011/01/json_in_php.html

The above has introduced several situations of [PHP] JSON value transfer and PHP reception, including relevant content. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn