我将以下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。有人可以指导我吗?感谢
答案 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"];