php - 语法错误:JSON.parse?
问题描述
因此,我正在制作一个简单的 Web 应用程序来测试 Ajax,由于某种原因,我收到 JSON.parse 错误,尽管我使用json_encode($results)
. 该应用程序让我选择一个客户并提取该客户的订单
JS文件:
function getOrders(clientId) {
$.ajax(
{
type: 'POST',
url: "AjaxRequests.php",
data : {
action: 'showOrders',
clientId: clientId
},
dataType : 'json',
success: function(results){
alert(results);
},
error: function(request, status, error){
console.log(clientId);
console.log(request.responseText);
console.log('error : ' + error);
console.log('status' + status);
},
}
)
};
AjaxRequests.php 文件
<?php
header('Content-Type: application/json; charset=UTF-8');
require_once './GestionClients.php';
if (isset($_POST['action'])) {
if ($_POST['action'] == 'showOrders') {
$clientId = $_POST['clientId'];
$gc = new GestionClients();
$results = $gc->getCmdsByClient($clientId);
echo json_encode($results);
}
}
?>
这是我从选择列表中选择一个客户端(本例中的第一个客户端,在数据库中 ID = 1)后在控制台中得到的结果:
1 script.js:16:25
Connection successfull![{"id":"2","date":"2021-02-17","type":"1","payee":"1","idClient":"1"},{"id":"4","date":null,"type":null,"payee":null,"idClient":"1"}] script.js:17:25
error : SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data script.js:18:25
statusparsererror
我尝试将 JSON 结果放在在线 JSON 解析器上,它看起来很好。感谢您的时间。
解决方案
正如我经常建议的那样,通过分解问题可以避免或至少快速识别这个问题:您试图调试 JS,但这不是被破坏的部分。
在这种情况下,您有两个关键部分:
- 一个 PHP 脚本,当使用正确的参数请求时,它会输出一些东西。您可以在浏览器中打开它,然后自己查看。
- 一些请求该 PHP 脚本并将其内容解析为 JSON 的 JS 代码。您可以使用只是 echoes 的 PHP 脚本,
{"hello": "world"}
甚至是上传到服务器的文本文件来测试它。
一旦知道如果 JSON 有效,JS 代码可以工作,您基本上可以忽略 #2,并在 #1 中查找问题。
如果您在浏览器中打开您编写的 PHP 脚本,它将显示:
Connection successfull![{"id":"2","date":"2021-02-17","type":"1","payee":"1","idClient":"1"},{"id":"4","date":null,"type":null,"payee":null,"idClient":"1"}]
现在,我们知道 JS 会尝试将其解析为 JSON,因此我们可以在浏览器的控制台中进行快速测试:
JSON.parse('Connection successfull![{"id":"2","date":"2021-02-17","type":"1","payee":"1","idClient":"1"},{"id":"4","date":null,"type":null,"payee":null,"idClient":"1"}]');
我们得到一个语法错误!好吧,我们当然会这样做:“连接成功!” 不应该是 JSON 的一部分。
所以我们深入研究 PHP 代码,找出它的来源,并阻止它发生。现在我们再次运行 PHP,它看起来像这样:
[{"id":"2","date":"2021-02-17","type":"1","payee":"1","idClient":"1"},{"id":"4","date":null,"type":null,"payee":null,"idClient":"1"}]
现在我们可以再次进行 JS 测试:
JSON.parse('[{"id":"2","date":"2021-02-17","type":"1","payee":"1","idClient":"1"},{"id":"4","date":null,"type":null,"payee":null,"idClient":"1"}]');
现在错误消失了,它给了我们一个数组。当我们在这里时,我们可以在控制台中查看数组的结构并确保它看起来正确。
现在我们才返回并运行原来的 AJAX 调用,看看它是否正常工作。如果不是,我们寻找可以突破的其他步骤,并重复该过程。
推荐阅读
- python-3.x - 使用 for 循环打印值与简单变量输入之间的区别
- php - 我们如何限制管理员以外的用户查看所有 php 错误?
- javascript - X轴的tooltips可以自定义吗?
- javascript - 如何使用 React 渲染对象列表
- python - 如何使用 python flask 解决未读结果错误
- javascript - 在反应中更新新的 document.body.offsetHeight
- javascript - 针对特定文本框架的 InDesign 脚本
- html - 在嵌套表中对齐 td
- docker - 启动时出现nginx docker问题
- clojure - 如何将函数变量绑定到 Clojure 中的当前执行范围?