我使用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的头文件,这似乎删除了键周围的引号,但没有改变任何东西。我一定是错过了什么,非常感谢任何建议/帮助。
2条答案
按热度按时间62lalag41#
这里不需要
JSON.parse
,因为您指定了dataType : 'json'
。你实际上并没有使用它,因为你没有分配它的输出。所以data
已经是一个JavaScript数组,而不是一个JSON字符串。data
是一个数组,因为PHP中的这段代码将所有结果(如果有的话)放入数组中。如果(正如我从您的查询中所怀疑的那样)您只期望查询得到一个结果,您可以简单地使用
无论哪种方式,在你的JS中,你都需要检查一个没有返回结果的查询,你可以使用optional chaining来完成,例如。
请注意,通过在查询中直接使用表单数据(
$id
),您很容易受到SQL注入的攻击。我推荐你阅读this Q&A来了解它的内容以及如何使你的代码安全。emeijp432#
按照以下方式使用。数据作为具有多个对象的数组传入
var name = data[0].lastname;