Не удается получить несколько значений из JSON с помощью AJAX - PullRequest
0 голосов
/ 29 августа 2018

Здравствуйте, я новичок в программировании и пытаюсь использовать 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: неожиданный токен <в JSON в позиции 173 </p>

и когда я пытаюсь подтвердить свой 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);
        }

    });

}

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Добро пожаловать в 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-инъекциями .

0 голосов
/ 29 августа 2018

Проблема в том, что вы повторяете объект 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...