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

WBOY
Release: 2016-08-08 09:27:30
Original
1095 people have browsed it

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>
    Copy after login

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>
Copy after login
  • 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>
Copy after login
  • 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>
Copy after login
Copy after login

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>
Copy after login
<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>
Copy after login
  • 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>
Copy after login
  • 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>
Copy after login
Copy after login
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');
Copy after login

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.

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template