无法在页面上显示JSON

时间:2014-03-26 10:20:39

标签: javascript php json

我一直在尝试从连接到我的数据库的PHP文件中获取我的JSON代码,以便使用XMLHttpRequest在我的网站上显示,但是我们无法拆分它们并显示它。

我们正在使用执行以下操作的php文件example.php:

function jsonFromQuery($result) {
    if (mysql_num_rows($result) > 0) {
        while($r = mysql_fetch_array($result, MYSQL_ASSOC)) {
            $json[] = $r;
        }
    } else {
        $json = "Table is empty";
    }

    return json_encode($json);
}

如果您打开php文件,这将在网站上显示以下json代码:

[{"UserID":"2","Firstname":"Piet","Lastname":"Klaas","Age":"23","Specialization":"Voet","Branch":"Been","Interests":"Hoofd","Hospital":"OLVG","Email":"pietklaas@gmail.com","ProfilePicture":""}]

有了这个,我们使用以下javascript文件来请求这个php文件并进行字符串化并尝试显示它。

var request = new XMLHttpRequest;
request.open('GET' , 'http://myurl.nl/example.php', false);
request.send(null);

if (request.status == 0)
    console.log(request.responseText);

var obj = JSON.stringify(request);
var firstname = obj.Firstname;
document.writeln(firstname);`

但是我得到了一个包含类型状态等的大量字符串。并且不知道如何将其拆分为自己显示。例如,页面上只有Firstname = Piet。

2 个答案:

答案 0 :(得分:2)

当您从PHP获取数据时,它已经是字符串形式。您需要使用JSON.parse()将其转换为可以使用的对象。尝试...

var obj = JSON.parse(request.responseText);
var firstname = obj[0].Firstname;
document.writeln(firstname);`

请注意,您回来的Json是一个对象列表:[{...},{...},{...}],因此您无法拨打.Firstname,因为您还没有指定你关心哪个对象。因此,上面示例中的[0]选择了第一个对象。

另一个想法......目前,如果您的PHP没有找到任何结果,它会发回一些不符合您期望的格式的内容。考虑将列表包装在状态为...的对象中

{
    "Success": true,
    "Results": [{...}, {...}]
}

或者让PHP脚本返回一个不同的HTTP代码来指示失败(404这里似乎合适)

为了将来参考,JSON.stringify的作用相反 - 它需要一个复杂的对象并将其转换为 Json

答案 1 :(得分:0)

您正在解析整个XMLHttpRequest对象

var obj = JSON.parse(request);

尝试仅使用响应主体

var obj = JSON.parse(request.responseText);