首页 > 解决方案 > 语法错误: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 解析器上,它看起来很好。感谢您的时间。

标签: phpjqueryjsonajax

解决方案


正如我经常建议的那样,通过分解问题可以避免或至少快速识别这个问题:您试图调试 JS,但这不是被破坏的部分。

在这种情况下,您有两个关键部分:

  1. 一个 PHP 脚本,当使用正确的参数请求时,它会输出一些东西。您可以在浏览器中打开它,然后自己查看。
  2. 一些请求该 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 调用,看看它是否正常工作。如果不是,我们寻找可以突破的其他步骤,并重复该过程。


推荐阅读