簡體   English   中英

語法錯誤:JSON.parse?

[英]SyntaxError: JSON.parse?

So i'm making a simple web application to test out Ajax and for some reason i'm getting JSON.parse error although i'm returning my results as JSON using 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,但這不是被破壞的部分。

在這種情況下,您有兩個關鍵部分:

  1. 一個 PHP 腳本,當使用正確的參數請求時,輸出一些東西。 您可以在瀏覽器中打開它,然后自己查看。
  2. 一些 JS 代碼請求 PHP 腳本,並將其內容解析為 JSON。 您可以使用僅回顯{"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"}]');

現在錯誤消失了,它給了我們一個數組。 當我們在這里時,我們可以在控制台中查看數組的結構並確保它看起來正確。

直到現在我們才返回 go 並運行原始的 AJAX 調用,看看它是否全部工作。 如果不是,我們尋找可以突破的其他步驟,並重復該過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM