我在从JSON变量中获取不同变量时遇到了一些问题。
我在get_shop.php文件上做了一个$ .post,它从数据库中获取数据,获取结果并将其放入数组中并对其执行json_encode并打印出来。
get_shop.php:
$id = $_GET["id"];
$query = "
SELECT
*
FROM shop
WHERE
id = :id
";
// The parameter values
$query_params = array(
':id' => $id
);
try
{
// Execute the query against the database
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
// Note: On a production website, you should not output $ex->getMessage().
// It may provide an attacker with helpful information about your code.
die("Failed to run query: " . $ex->getMessage());
}
// Retrieve the user data from the database. If $row is false, then the username
// they entered is not registered.
$row = $stmt->fetch();
$database_data = array(
"name" => $row["name"],
"description" => $row["description"],
"category" => $row["category"],
"price" => $row["price"]
);
print(json_encode($database_data, JSON_UNESCAPED_UNICODE));
之后我用shop.php(产生$ .post请求的文件)收到的数据执行console.log
shop.php $ .post示例:
$(document).ready(function(){
console.log("ID: " + id );
$.post("get_shop.php?id="+id+"",
function(data,status){
console.log(data + "\nStatus: " + status); )};
结果的一个例子:
{"name":"Hardrive 5GB","description":"Speed 10MB/s","category":"Hardrive","price":"1000"}
现在,问题是我想显示结果的一部分(比如“name”),但它表示“undefined”(我使用data [name])。我该如何解决这个问题?谢谢!
答案 0 :(得分:2)
接收的数据只是一个字符串,而不是JSON对象。所以你必须通过JSON.parse()
运行它(如在Pitchinnate的回答中)或使用jQuery的AJAX选项自动进行解析(参见dataType' json'例子如下):
$.post('get_shop.php?id='+id, function(data, status) {
console.log(data + "\nStatus: " + status);
}, 'json');
您可能还有jQuery intelligent guess
,但您必须在PHP代码中使用正确的http标头提示它:
<?php
header('Content-type: application/json');
在这种情况下,jQuery知道收到的数据是JSON并自动解析它。
答案 1 :(得分:0)
您需要先解析Json字符串,然后将其转换为对象,然后使用obj.attribue
或obj['attribute']
引用各个值。
$.post("get_shop.php?id="+id+"",function(data,status){
var obj = JSON.parse(data);
var name = obj.name;
});
查看@ RomanHocke的答案,看看允许Jquery自动将响应转换为javascript对象的其他方法。
答案 2 :(得分:0)
它告诉您name
中的data[name]
未定义,除非您将名称定义为可用作键的字符串。访问JavaScript对象的属性有两种选择:
通过点表示法访问:
data.name // Similar to how you were trying to do it without a string key
使用密钥(字符串/数字):
data["name"] // Also similar, but notice the quotes around name.
这些方法会给你相同的结果,唯一真正有所作为的时候是你的密钥中有一个空格,连字符或其他字符,这使得它成为JavaScript中的非法标识符你应该选择第二个方法。否则,任何一种方法都适合你。
如果你的数据没有被jQuery正确解析,你可以像这样修改你的请求:
$.post("get_shop.php", {id: id}, function(data, status) {
// data is an object now
}, "json");
我做了两件不同的事情,我利用jQuery的数据实用程序而不是手动构建URL(第二个参数),并且我为返回(最后一个参数)提供了一个数据类型,告诉jQuery将返回值视为JSON,表示data
将是生成的已解析对象。
答案 3 :(得分:-1)
使用它来正确获取JSON数据
$.getJSON("get_shop.php?id="+id,
function(data,status){
console.log(data + "\nStatus: " + status);
alert(data.name); //to get name
alert(data.description); // to get description
alert(data.category); //to get category
alert(data.price); //to get price
});