SyntaxError: «JSON.parse: неожиданный непропуск ...» при возврате JSON из PHP - PullRequest
0 голосов
/ 18 февраля 2019

Я столкнулся с проблемой, когда JSON, возвращенный из запроса PHP, недопустим, и я не совсем уверен, почему;Я еще учусь.Когда datatype исключен, код ниже возвращает:

{"Customer_ID":"0", "FirstName":"John", "LastName":"Smith"}
{"Customer_ID":"1", "FirstName":"Jane", "LastName":"Smith"}

в противном случае он возвращает:

SyntaxError: "JSON.parse: unexpected non-whitespace character after ..."

Я думал, что это может быть потому, что запись не возвращается в одном JSONответ, но я не вижу, что это проблема, поскольку параллельные ответы являются JSON.Есть идеи?Кто-нибудь предлагает?Не стесняйтесь указывать на семантические проблемы.

HTML:

getRecord("*", "customer", "");

JavaScript:

function getRecord(field, table, condition) {
    var request = $.ajax({
        url: "./handler.php",
        method: "GET",
        dataType: "JSON",
        cache: "false",
        data: {
            action: "SELECT",
            field: `${field}`,
            table: `${table}`,
            condition: `${condition}`,
        },
    });

    request.done(function(data, status, xhr) {
        console.log(data, status, xhr);
    });

    request.fail(function(xhr, status, error) {
        console.log(xhr, status, error);
    });

};

PHP:

<?php

    # IMPORT SETTINGS.
    include "settings.php";

    # FUNCTION DISPATCHER.
    switch($_REQUEST["action"]) {

        case "SELECT":
            getRecord($conn);
            break;

        default:
            printf('Connection Error: Access Denied.');
            mysqli_close($conn);
    }

    # LIST OF COLUMNS THAT WE NEED.

    function getRecord($conn) {
        $table = $_REQUEST["table"];
        $field = $_REQUEST["field"];
        $condition = $_REQUEST["condition"];

        if (!empty($condition)) {
            $query = "SELECT $field FROM $table WHERE $condition";
        } else {
            $query = "SELECT $field FROM $table";
        }

        if ($result = mysqli_query($conn, $query)) {
            while ($record = mysqli_fetch_assoc($result)) {
                echo json_encode($record);
            }
        }

        # CLOSE THE CONNECTION.
        mysqli_close($conn);

    }

?>

1 Ответ

0 голосов
/ 18 февраля 2019

Ваш JSON недопустим, поскольку он состоит из нескольких объектов.Что вам нужно сделать, это поместить все ваши результаты в массив, а затем повторить json_encode этого.Попробуйте что-то вроде этого:

    $records = array();
    if ($result = mysqli_query($conn, $query)) {
        while ($records[] = mysqli_fetch_assoc($result)) {
        }
    }
    echo json_encode($records);

Это даст вам вывод, который выглядит примерно так:

[
    {"Customer_ID":"0", "FirstName":"John", "LastName":"Smith"},
    {"Customer_ID":"1", "FirstName":"Jane", "LastName":"Smith"}
]

, и вы можете получить доступ к каждому из элементов вашего Javascript с помощью чего-то вроде

let customer = data[0].FirstName + ' ' + data[0].LastName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...