如何解析JSON对象并在屏幕上将值显示为字符串?

时间:2014-09-18 14:26:22

标签: javascript json

目前我发送以下JSON

{"约翰":[{"硬币":" 600"" FIRST_NAME":"约翰" }]}

我怀疑换线应该在那里。我想在这种情况下获取硬币的值600并将其显示在div中。

function importCoins(str) {

    if (str=="") {
        document.getElementById("coins").innerHTML="";
        return;
    }
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

    }


    xmlhttp.onreadystatechange=function() {


        if (xmlhttp.readyState==4 && xmlhttp.status == 200){
            alert(xmlhttp.response);

            data = JSON.parse(xmlhttp.response);
            receivedData(data);

        }
    }

     function receivedData(data) {
     document.write(data.Coins);
     };

    xmlhttp.open("GET","http://server/~name/folder/extractUser.php");
    xmlhttp.responseType = "json";
    xmlhttp.send();
}

importCoins();

这是我的PHP代码:

include("mysqlconnect.php");

$query  = "SELECT Coins, First_name  FROM users WHERE Id = 1";
$result = mysql_query($query) or die (mysql_error());
$data = array();

while($rows = mysql_fetch_array($result,MYSQL_ASSOC)){
$data[$rows['First_name']][] = $rows;
}
echo json_encode($data);

2 个答案:

答案 0 :(得分:1)

  

并将其显示在div

假设您的 HTML 中有<div id="my_target"></div>,则可以在其中设置文字

var elm = document.getElementById('my_target'); // HTMLElement or null
elm.textContent = 'foo'; // set it's text to "foo"

仅在元素存在后才能使用。换句话说,您需要等待页面完成加载或仅在元素的关闭标记后的<script>标记中启动此代码


现在,假设你有一个 JavaScript对象 var o = {bar: 'baz'};,你可以像这样访问它的属性

o['bar']; // "baz" (the value by accessing _key_ "bar" from _Object_ o

如果您不了解对象中的,则可以for..in循环播放

var key;
for (key in o) {
    console.log(key, o[key]); // logs "bar" "baz"
}

要在调用某些内容之前等待当前页面完成加载,请在 Window对象上侦听加载事件

window.addEventListener('load', function () {
    // code to invoke after page has loaded
});

最后,当使用 XMLHttpRequest 来获取JSON时,您可以使用内置方法自动为它解析它,这样您就可以在最后获得 JavaScript Object

var xhr = new XMLHttpRequest(),
    method = 'GET',
    url = "http://server/~name/folder/extractUser.php";
xhr.addEventListener('load', function (e) {
    // code to invoke after receiving response
    console.log(this.response); // let's log the object
});
xhr.open(method, url);
xhr.responseType = 'json'; // let the request know to expect JSON
xhr.send();

全部放在一起;

function getJSON(url, callback) {
    var xhr = new XMLHttpRequest(),
        method = 'GET';
    xhr.addEventListener('load', function (e) {
        callback(this.response);
    });
    xhr.open(method, url);
    xhr.responseType = 'json';
    xhr.send();
}

function displayCoins(obj) {
    var elm = document.getElementById('my_target');
    elm.textContent = obj["John"][0]["Coins"];
}

window.addEventListener('load', function () { // wait for page to load
    // then invoke it
    getJSON("http://server/~name/folder/extractUser.php", displayCoins);
});

最后的说明;当您遇到 JavaScript 问题或正在调试时,始终检查您的控制台输出。这为您提供了更多信息,通常会让您发现问题,如果不知道要向谷歌发送哪条错误消息。


  

我很难调整您的最终解决方案以适应var key; for (key in o) { console.log(key, o[key]); // logs "bar" "baz" }您是否可以编辑已完成的解决方案以获得未知密钥

我没有包含此内容,因为如果您的对象中只有许多键,或者只有一个键,我就不知道您想要的行为。我假设这个例子只有一个;

for..in循环放入displayCoins 功能

function displayCoins(obj) {
    var elm = document.getElementById('my_target'),
        key;
    for (key in obj) {
        elm.textContent = obj[key][0]["Coins"];
        break; // stop after first key
    }
}

答案 1 :(得分:0)

您可以将其传递给variable并执行:

var a = {"John":[{"Coins":"600","First_name":"John"}]};
console.log(a.John[0].Coins);     //"600"