PHP 未检测到来自 JavaScript 请求的 POST JSON 数据
Posted
技术标签:
【中文标题】PHP 未检测到来自 JavaScript 请求的 POST JSON 数据【英文标题】:PHP not detecting POST JSON data from JavaScript request 【发布时间】:2019-09-04 19:15:54 【问题描述】:我需要一些对我的应用程序至关重要的代码的帮助。我正在制作一个小型点击游戏,我希望用户能够通过 php 将数据保存和加载到我的服务器。我不想使用本地存储让任何人更难编辑他们的经济和“作弊”。当用户单击我拥有的保存按钮时,它会触发我的 vue 方法来初始化保存。我将数据转换为 JSON 格式没有问题,但是我无法让 PHP 通过 POST 读取这些数据。我检查了网络标头,它显示正在发送的东西,似乎 PHP 只是没有捕捉到它。我将在下面包含 JS 部分和 PHP 部分的代码。只有当 array_key_exists 现在存在时,PHP 才会设置为回显,因为在解决了这个问题后,我将能够轻松处理其余部分。任何帮助将不胜感激!
我已经尝试过这个,到目前为止还没有工作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>";
?>
【问题讨论】:
您在检查员网络选项卡中看到请求?如果是,请点击它,如果是 POST,请检查“请求方法”,然后转到 Request Payload 并查看参数是否存在 如果您发现任何错误,请分享服务器日志。 @RăducanuIonuţ 我检查了请求方法是 POST,但是我没有看到请求有效负载。它有一个表单数据区域,它确实显示了我发送的内容 @Naina 服务器日志尽可能干净(无错误) 【参考方案1】:在访问值之前在 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
那是因为您没有使用XMLHttpRequest
对象的responseText
属性来查看从服务器接收到的文本。使用下面的 sn-p 查看响应文本。
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
【讨论】:
我还没有尝试访问这些值,现在我只是在检查 POST 数据是否存在,就像提交普通表单一样。我的问题在于我的 PHP 的行为方式,数据根本不存在 @Elderis 你的意思是什么我的问题是我的PHP是如何行动的,数据根本不存在?到底什么不适合你?请说明您的预期与实际输出。 在 Chrome 的我的网络选项卡上,它显示了通过 POST 发送到 PHP 文件的数据,并显示它有数据。但是当我在我的 PHP 中测试 POST 数据时,什么也没有发生。我正在测试它,就像我测试表单中的 POST 数据一样 我希望它会打印“SALO Ready!”但它什么都不做 @Elderis 我已经更新了我的答案,请参阅我的答案的 Update# 1: 部分。以上是关于PHP 未检测到来自 JavaScript 请求的 POST JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章
cppcheck 未检测到来自 epoll_create 的资源泄漏