Не удается получить несколько значений из json с помощью ajax

Здравствуйте, я новичок в программировании, и я пытаюсь использовать ajax и хотел бы получить значение из этого php, но не могу заставить его работать

$userID = $_SESSION['id'];

$query = "SELECT * from ipcr where userID = '".$userID."'";
$result = mysqli_query($conn, $query);

while ($row = mysqli_fetch_assoc($result)) {
    $current_id = $row['id'];
    $current_details = $row['details'];
    $current_dateCreated = $row['dateCreated'];
    $current_ipcrCode = $row['ipcrCode'];
    $current_employeeNumber = $row['employeeNumber'];

    $array = array(
        'id'=>$current_id,
        'details' => $current_details,
        'dateCreated' => $current_dateCreated,
        'ipcrCode' => $current_ipcrCode,
        'employeeNumber' => $current_employeeNumber
    );

    echo json_encode($array);
}

но я продолжаю получать сообщение об ошибке:

SyntaxError: Unexpected token < in JSON at position 173

и когда я пытаюсь проверить свой json, он дает эта ошибка

Это фактический вывод, который повторил php.

{"id":"21836","details":"Details here","dateCreated":"2018-08-01 14:25:28","ipcrCode":"22703","employeeNumber":"140010663"}
{"id":"21837","details":"details here","dateCreated":"2018-08-01 14:25:57","ipcrCode":"22703","employeeNumber":"140010663"}

Что-то не так с тем, как я использую json_encode? похоже, что формат, который я повторил, неправильный.

также так выглядит мой скрипт

function get_ipcr() {
    var userID = <?php echo $_SESSION['id']; ?>;

    $.ajax({
        type: "POST",
        url: "../includes/php/load_ipcr.php",

        dataType: "json",
        success: function(results) {
            alert("success");
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert(errorThrown);
        }

    });

}

Ваш echo json_encode($array); - это внутри всего вашего цикла, поэтому он повторяется несколько раз. Переместите его после петли

Sean 29.08.2018 01:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Проблема в том, что вы повторяете объект JSON в цикле. Это приводит к чему-то вроде {valid JSON}{valid JSON}, который не является действительным JSON.

Вы можете исправить это:

$employees = array();
while ($row = mysqli_fetch_assoc($result)) {
    $current_id = $row['id'];
    $current_details = $row['details'];
    $current_dateCreated = $row['dateCreated'];
    $current_ipcrCode = $row['ipcrCode'];
    $current_employeeNumber = $row['employeeNumber'];
// Record into employees array.
    $employees[] = array(
        'id'=>$current_id,
        'details' => $current_details,
        'dateCreated' => $current_dateCreated,
        'ipcrCode' => $current_ipcrCode,
        'employeeNumber' => $current_employeeNumber
    );
}
echo json_encode($employees);

Добро пожаловать в stackoverflow!

Есть несколько вещей, о которых вы услышите из разных комментариев / ответов, я рекомендую вам их прислушаться - это может показаться ошеломляющим или вроде «слишком много информации» - но поверьте мне, мы все здесь, чтобы помочь!

Ответ на вашу проблему
Превратите строку JSON весь в единый массив (массив массивов) вместо многократного повторения строки JSON внутри цикла.

Дополнительный совет
Кроме того, в качестве подсказки, вы увеличиваете набор текста, назначая все переменные ($current_id = $row['id'] и т. д.). Вы можете просто использовать $row['id'] напрямую ... ниже вы можете видеть, что я показал один способ оптимизации вашего кода:

// shorthand version of $array = array()
$array = [];
while ($row = mysqli_fetch_assoc($result)) {
    // don't bother assigning $row values to a series of variables
    // removed all the lines like the next one....
    // $current_id = $row['id'];
    // push this record onto the array of arrays....
    $array[] = [
        // assign the array values directly from $row
        'id'             =>$row['id'],
        'details'        => $row['details'],
        'dateCreated'    => $row['dateCreated'],
        'ipcrCode'       => $row['ipcrCode'],
        'employeeNumber' => $row['employeeNumber']
    ];
}

echo json_encode($array);

И наконец, САМОЕ ВАЖНОЕ
Пожалуйста, пожалуйста - НЕ пишите подобные запросы. Он широко открыт для атак с использованием SQL-инъекций, что является серьезной проблемой.

Пожалуйста посмотреть этот пост о том, как предотвращение атак с использованием SQL-инъекций.

Спасибо за ответ и все советы!

Sciryl 29.08.2018 01:27

Другие вопросы по теме