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

[PHP] Several situations of JSON value transfer and PHP reception, several situations of json_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:01:10897browse

[PHP] Several cases of JSON value transfer and PHP reception, several cases of json

Using Chrome's background network, analyzed the $.ajax through JQuery () Several situations when posting json data to PHP:

<ul>
<li>
<p><span><strong>无法</strong></span>在PHP中通过$_POST 以及 $_REQUEST 获取json数据,即</p>

<pre class="code"><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, the corresponding data types are text/xml or soap or application/octet-stream. The content cannot be parsed, and it will fail if the $_POST array is used to receive it.

Scenario A:

<p>js里<span><strong>没有</strong></span>加入属性contentType: "application/json; charset=utf-8",</p>

<pre class="code"><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 obtain 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"); can get the data, that is,
<span>$json</span> = <span>file_get_contents</span>("php://input");   <span>//</span><span> empty($json) 为 0</span>

Scenario B:

<p>js里加入属性contentType: "application/json; charset=utf-8",</p>

<pre class="code"><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><strong>contentType: </strong></span></span><strong>"application/json; charset=utf-8"</strong><span><span><strong>,</strong></span></span>
<em id="__mceDel"><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'] 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"); 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:

<p>是否加入以下</p>

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

There is 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

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/972513.htmlTechArticle[PHP] Several cases of JSON value transfer and PHP reception, several cases of json using Chrome's background network, Analyzed several situations when posting json data to PHP through JQuery's $.ajax (): None...
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