JSON возвращает Undefined с Javascript Parse - PullRequest
0 голосов
/ 23 апреля 2020

В настоящее время я работаю над проектом, в котором используются объекты Javascript и JSON. Я пытаюсь заполнить данные всплывающим модальным режимом. Как работает процесс, пользователь щелкает по заголовку проблемы обратной связи и, используя идентификатор проблемы обратной связи, извлекается из базы данных и вставляется в JSON объект. Единственная проблема заключается в том, что модал возвращается с "Undefined". Первый скрипт - это моя функция showTicket, которая вызывается с помощью onclick.

function showTicket(id) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                var myObj = JSON.parse(this.responseText);
                document.getElementById("issueHeader").innerHTML = myObj.title;
            }
        };
        xmlhttp.open("GET", "./applet/ajax.fetchIssue.php?issueID="+id, true);
        xmlhttp.send();
        jQuery('#issueModal').modal('show');
    }

Следующий скрипт - это способ вызова данных с использованием ajax.fetchIssue.php

if (isset($_GET['issueID'])) {
    $modalQuery = dbQuery("SELECT * FROM `feedback` WHERE `id` = '" . $_GET['issueID'] . "'");
    while ($data = mysqli_fetch_assoc($modalQuery)) {
        echo '[{';
        echo '"title":"' . $data['subject'] . '", ';
        echo '"body":"' . $data['body'] . '", ';
        echo '"date":"' . $data['submission_date'] . '", ';
        echo '"category":"' . $data['feedback_category'] . '"';
        echo '}]';
    }
}

Теперь мой JSON Объект

[{"title":"Testing", "body":"Testing Feedback System...", "date":"2020-04-20", "category":"other"}]

Я смотрел на другие темы, и они, похоже, не помогают мне сузить суть моей проблемы. Любая обратная связь приветствуется. Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Check Browser console

Итак, из скриншота видно, что ваш myObj.title фактически не определен. Как myObj имеет тип массива. Поэтому вам лучше перебрать myObj, и если ожидается только один объект, используйте простой JSON объект, а не массив.

1 голос
/ 23 апреля 2020

Составление json через echo не очень удобно) Может быть проще использовать json_encode через array. Возможно, это решит вашу проблему.

<?php
    header('Content-Type: application/json');
    if (isset($_GET['issueID'])) {
        $array = array();
        $modalQuery = dbQuery("SELECT * FROM `feedback` WHERE `id` = '" . $_GET['issueID'] . "'");
        while ($data = mysqli_fetch_assoc($modalQuery)) {
            $array[] = array('title' => $data['subject'], 'body' => $data['body'], 'date' => $data['submission_date'], 'category' => $data['feedback_category']);
        }
        echo json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
    }
?>

JS:

function showTicket(id) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "./applet/ajax.fetchIssue.php?issueID="+id, true);
    xmlhttp.send();

    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            var myObj = JSON.parse(this.responseText);
            document.getElementById("issueHeader").innerHTML = myObj[0].title;
        }
    };
    jQuery('#issueModal').modal('show');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...