PHP无法从JavaScript请求中检测到POST JSON数据

时间:2019-04-14 18:10:51

标签: javascript php json vue.js

我需要一些对我的应用程序必不可少的代码的帮助。我正在制作一个小型答题器游戏,我希望用户能够通过PHP保存数据并将其加载到我的服务器。我不想使用本地存储来使任何人更难编辑自己的经济状况和“作弊”。当用户单击我拥有的保存按钮时,它将触发我的vue方法,该方法初始化保存。我将数据转换为JSON格式没有问题,但是我无法让PHP通过POST读取此数据。我检查了网络标头,它表明正在发送东西,似乎PHP并未捕获它。我将在下面包括JS部分和PHP部分的代码。仅当array_key_exists存在时,PHP才设置为echo,因为在解决了这个问题后,我将能够轻松处理其余部分。任何帮助将不胜感激!

我已经尝试遵循此方法,但到目前为止Send JSON data from Javascript to PHP?

仍然没有用

JS

saloOut: function() {
            var saveData = {
                saveMoney: this.money,
                saveCrystals: this.crystals,
            };
            saveData = "saveData=" + (JSON.stringify(saveData));
            var sendData = new XMLHttpRequest();
            sendData.open("POST", "salo.php", true);
            sendData.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            sendData.send(saveData);
            console.log(saveData);
        }

PHP

<?php
    if (array_key_exists("saveData", $_POST)) {
        echo "<p>SALO Ready!</p>";
    }
?>

1 个答案:

答案 0 :(得分:0)

在访问值之前,先在PHP端解码JSON字符串,如下所示:

<?php
    if(isset($_POST['saveData'])){
        $result = json_decode($_POST['saveData'], true);
        // use $result['saveMoney'] and $result['saveCrystals'] accordingly
    }
?>

更新#1:

如下文OP所述,I expect that it will print "SALO Ready" but it is instead doing nothing

那是因为您没有使用responseText对象的XMLHttpRequest属性来查看从服务器收到的文本。使用下面的代码片段查看响应文本。

saloOut: function() {
    var saveData = {
        saveMoney: this.money,
        saveCrystals: this.crystals,
    };
    saveData = "saveData=" + (JSON.stringify(saveData));
    var sendData = new XMLHttpRequest();
    sendData.open("POST", "salo.php", true);
    sendData.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    sendData.send(saveData);

    sendData.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            alert(this.responseText);
        }
    };
}

参考:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseText