В настоящее время я работаю над проектом, в котором с помощью Javascript и JSON Objects я пытаюсь заполнить данные во всплывающем окне. Как работает процесс, пользователь щелкает по заголовку проблемы обратной связи, и, используя идентификатор проблемы обратной связи, данные извлекаются из базы данных и вставляются в объект 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"}]

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

0
thealexvond 23 Апр 2020 в 20:56

2 ответа

Check Browser console

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

1
Samarth 23 Апр 2020 в 18:10

Составление 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');
}
0
ScreamX 23 Апр 2020 в 18:21