【问题标题】:SyntaxError: JSON.parse?语法错误:JSON.parse?
【发布时间】:2021-05-09 05:08:36
【问题描述】:

所以我正在制作一个简单的 Web 应用程序来测试 Ajax,由于某种原因,我收到 JSON.parse 错误,尽管我使用 json_encode($results) 将结果作为 JSON 返回。 该应用程序让我选择一个客户并提取该客户的订单

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 解析器上,它看起来还不错。 感谢您的宝贵时间。

【问题讨论】:

  • “连接成功!”在哪里来自(哪里?那是在PHP的响应中吗?因为如果是这样,那是你的问题,因为它绝对不是有效的 JSON。
  • 愚蠢的我,删除实际有效的,你能向我解释为什么它是相关的吗?应该离问题不远了吧?
  • Connection successfull![{"id":... 不是有效的 JSON。这是 JavaScript 接收到的字符串。

标签: php jquery json ajax


【解决方案1】:

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

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

  1. 一个 PHP 脚本,当使用正确的参数请求时,它会输出一些东西。您可以在浏览器中打开它,然后自己查看。
  2. 一些请求 PHP 脚本并将其内容解析为 JSON 的 JS 代码。您可以使用仅回显 {"hello": "world"} 的 PHP 脚本或上传到服务器的文本文件进行测试。

一旦你知道如果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 调用,看看它是否正常工作。如果不是,我们会寻找可以突破的其他步骤,然后重复该过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2020-04-13
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多