解析来自Ajax调用的JSON响应问题

bq9c1y66  于 2023-10-21  发布在  其他
关注(0)|答案(2)|浏览(125)

我使用Ajax调用从数据库中查找单个记录,返回响应,JSON.parse不起作用(“Unexpected identifier“object””),但当我试图访问它作为对象的任何值时,我也得到了undefined。
Ajax调用:

$.ajax({
                type        : 'POST', // define the type of HTTP verb we want to use (POST for our form)
                url         : 'php/mannoteslookup.php', // the url where we want to POST
                data        : formData, // our data object
                dataType    : 'json', // what type of data do we expect back from the server
                encode        : true,
                success: function(data) {
                    console.log(data);
                    JSON.parse(data);
                    var name = data.lastname;
                    console.log(name);
                    $('#notes-modal-title').append(name);
                },
                error: function(error) {
                    console.log(error);
                }
            })

json是从这个php片段中返回的:

$sql = "SELECT lastname, journal, progress_notes FROM myrecords WHERE id=" . $id;
$result = $conn->query($sql); 
$dbdata = [];
while ($row = $result->fetch_assoc()) {
    $dbdata[] = $row;
}
echo json_encode($dbdata);

以下是返回的内容:

[{"lastname":"Smalls","journal":"Nature Medicine","progress_notes":"2023-10-19 - Form notification received\r\n"}]

我对这方面还很陌生,但我试过在php中添加一个指定json的头文件,这似乎删除了键周围的引号,但没有改变任何东西。我一定是错过了什么,非常感谢任何建议/帮助。

62lalag4

62lalag41#

这里不需要JSON.parse,因为您指定了dataType : 'json'。你实际上并没有使用它,因为你没有分配它的输出。所以data已经是一个JavaScript数组,而不是一个JSON字符串。
data是一个数组,因为PHP中的这段代码将所有结果(如果有的话)放入数组中。

$dbdata = [];
while ($row = $result->fetch_assoc()) {
    $dbdata[] = $row;
}

如果(正如我从您的查询中所怀疑的那样)您只期望查询得到一个结果,您可以简单地使用

$dbdata = $result->fetch_assoc();

无论哪种方式,在你的JS中,你都需要检查一个没有返回结果的查询,你可以使用optional chaining来完成,例如。

// array
name = data[0]?.lastname ?? 'Not found';
// result
name = data?.lastname ?? 'Not found';

请注意,通过在查询中直接使用表单数据($id),您很容易受到SQL注入的攻击。我推荐你阅读this Q&A来了解它的内容以及如何使你的代码安全。

emeijp43

emeijp432#

按照以下方式使用。数据作为具有多个对象的数组传入
var name = data[0].lastname;

相关问题