JSON返回未定义的Javascript解析

时间:2020-04-23 17:56:26

标签: javascript php json ajax

我目前正在使用Javascript和JSON对象的项目中,尝试以弹出模式填充数据。该过程的工作方式是,用户单击反馈问题的标题,然后使用反馈问题的ID从数据库中提取数据并将其插入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 个答案:

答案 0 :(得分:2)

Check Browser console

因此,从屏幕截图中您可以看到myObj.title实际上是未定义的。由于myObj是数组类型。因此,您最好在myObj上进行迭代,如果只需要单个对象,则使用简单的JSON对象而不是数组。

答案 1 :(得分:1)

通过echo组成json不太方便)通过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');
}