从JSON变量中获取变量

时间:2014-04-18 15:38:30

标签: php jquery json

我在从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])。我该如何解决这个问题?谢谢!

4 个答案:

答案 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.attribueobj['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
});