2014-03-26 109 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