在PHP中从Javascript解码Json字符串

时间:2014-10-21 20:10:10

标签: javascript php html

我将以下json从我的javascript发送(POST)到php

function boardToJSON() {
    return JSON.stringify({
        "pieces" : gPieces,          // gpieces and gdestinations is an array
        "destinations" : gDestinations,
        "boardSize" : kBoardHeight        // boardSize is an integer value 9

    });

//在Button Click上调用下面的函数, url 包含到php文件的PATH。

function makeMove() {
    var move;
    $.ajax({
        type: 'POST',
        url: url,
        contentType: "application/json",
        dataType: "json",
        async: false,
        data: boardToJSON(),
        success: function(msg) {
            move = msg;     
        },
        error: function(jqXHR, exception) {
            if (jqXHR.status === 0) {
                alert('Unable to connect.\n Verify Network.');
            } else if (jqXHR.status == 404) {
                alert('Requested URL of HalmaAI not found. [404]');
            } else if (jqXHR.status == 500) {
                alert('Internal Server Error [500].');
            } else if (exception === 'parsererror') {
                alert('Data from HalmaAI was not JSON :( Parse failed.');
            } else if (exception === 'timeout') {
                alert('Time out error.');
            } else if (exception === 'abort') {
                alert('Ajax request aborted.');
            } else {
                alert('Uncaught Error.\n' + jqXHR.responseText);
            }
        }

    });

在服务器端(在PHP中)我试图像这样得到它

$jsonString = file_get_contents("php://input");
$myJson = json_decode($jsonString);

echo $myJson["boardSize"];   // also tried  $myJson.boardSize etc 

问题是我无法在PHP中解码JSON。有人可以指导我吗?感谢

2 个答案:

答案 0 :(得分:1)

您应该将AJAX请求的contentType属性设置为application/json。这将根据请求设置正确的标头,以便服务器不会尝试填充$_POST以支持您使用原始输入。

function makeMove() {
    var move;
    $.ajax({
        type: 'POST',
        url: url,
        contentType: "application/json"
        dataType: "json",
        async: false,
        data: boardToJSON(),
        success: function(msg) {
            move = msg;     
        }
    });
}

假设这有效,您可以访问boardSize属性:

$myJson->boardSize;

您遇到的另一个问题是,由于您指定了dataType: "json",因此您需要确保发回有效的JSON,而您目前不是。

这是无效的JSON:

echo $myJson["boardSize"];

这将是(当然这是一个微不足道的例子):

$returnObj = new stdClass();
$returnObj->boardSize = $myJson->boardSize;
echo json_encode($returnObj);

答案 1 :(得分:0)

如果你想在PHP中解码json到数组,你应该将json_decode的第二个参数设置为true
示例:

$jsonString = file_get_contents("php://input");
$myJson = json_decode($jsonString, true);
echo $myJson["boardSize"];