2014-03-26 85 views
0

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

我们使用的是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); 
} 

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

[{"UserID":"2","Firstname":"Piet","Lastname":"Klaas","Age":"23","Specialization":"Voet","Branch":"Been","Interests":"Hoofd","Hospital":"OLVG","Email":"[email protected]","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。

+0

您的JSON已经是字符串形式,你不需要它字符串化,你想要的是[JSON.parse(HTTPS://developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) –

+0

为什么要解析XMLHttpRequest而不是你需要的数据?大声笑 – vikingmaster

+0

你走错了路... Stringify将一个对象变成一个JSON字符串(序列化它),而不是相反。你wnat'JSON.parse' – Basic

回答

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。字符串化则相反 - 它需要一个复杂的对象,并将其转换为的Json

+2

解析'request.responseText'而不是'request' – vikingmaster

+0

@Jan很好的发现,我没有检查那一点。谢谢/修正了 – Basic

0

您序列化整个XMLHttpRequest对象

var obj = JSON.stringify(request);

尝试使用刚刚响应主体

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

+1

,虽然他确实需要request.responseText,但他需要'JSON.parse',而不是'JSON.stringify',因为它已经是一个字符串了。 –

+0

对!刚刚纠正了答案 – dpi