从PHP中的Javascript解码Json字符串 - javascript

我有以下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。有人可以在这里引导我吗?谢谢

javascript大神给出的解决方案

您应该将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);

执行onclick时获得意外令牌 - javascript

我正在使用onclick事件从PHP调用JS函数。这是我的代码:我在一个函数中,因此我需要通过PHP来完成它,因为然后我会返回:$html = '<input type="checkbox" checked value="1" id="setGetSku" name="se…

提交初始化后删除某些帖子数据 - javascript

在初始化提交之后但在将数据发送到处理页面之前,是否可以过滤$ _POST表单数据?我想象过程的方式:提交->收集$ _POST数据->发送数据我想做的事:提交->收集$ _POST数据->删除某些元素->发送数据这样就不必更改处理页面以过滤掉不希望接收的元素了吗? javascript大神给出的解决方案 当然可以,您可以在JS …

验证php中的javascript对象 - php

在我的用户界面中,用户可以构建一些javascript对象,例如:var box = { "width": "100px", "height": "200px", "click": function () { alert("You clicked t…

Ajax功能后没有数据传递到URL - javascript

这是我使用Ajax将参数传递到另一个PHP页面的脚本。 $(document).on( "click",".btndriver", function() { var id = $(this).attr("id"); var nombre = $(this).attr("nombre…

如何从客户端将数据插入数据库? - javascript

我是Web开发的初学者,可以访问cpanel上托管的网站,并且需要对其进行一些更改。这个网站的后端是由蛋糕PHP制作的,我想使用ajax从客户端将一些数据插入其数据库。问题是我不知道如何获取负责插入数据库的PHP文件的URL。参见下面的代码:var xhttp = newXMLHttpRequest(); xhttp.onreadystatechange= …