2011-01-30 66 views
5

我想我在這裏的東西:通過AJAX調用的echo'd PHP編碼JSON返回什麼?

使用AJAX我從一個數據庫中的一些數據並將其發送回JSON格式 $ jsondata =陣列();

while ($Row = mysql_fetch_array($params)) 
{ 

    $jsondata[]= array('cat_id'=>$Row["cat_id"], 
          'category'=>$Row["category"], 
        'category_desc'=>$Row["category_desc"], 
        'cat_bgd_col'=>$Row["cat_bgd_col"]); 
}; 

echo("{\"Categories\": ".json_encode($jsondata)."};"); 

到目前爲止沒問題我想。

在cleint方面我接收返回到上述

ajaxRequest.responseText 

,如果我這樣做

var categoriesObject = ajaxRequest.responseText; 
alert(categoriesObject); 

我看到我期待看到即警報的整個陣列。

哪裏出了問題就是試圖訪問響應。我得到的錯誤是「categoriesObject」不是一個對象 - 如果不是它是什麼?什麼是bugginh我是,我甚至不能像這樣訪問它:

document.write(categoriesObject.Categories[0].category); 

所以我做錯了什麼?

+1

您需要將字符串解析爲對象。使用有問題的eval()或使用JSON解析器。看到這裏:http://www.json.org/js.html邊注意,像jQuery這樣的框架已經建立在 – 2011-01-30 22:45:58

回答

11
  1. 您不應該手動創建JSON。用途:

    echo json_encode(array('Categories' => $jsondata)); 
    

    或只是

    echo json_encode($jsondata); 
    

    我不明白了一個道理添加Categories

  2. 你必須在客戶端的JSON解碼,使用JSON.parse(在大多數瀏覽器可用,但也可作爲script):

    var data = JSON.parse(ajaxRequest.responseText); 
    
  3. 如果你想成爲非常正確,加

    header('Content-type: application/json'); 
    

    到您的PHP腳本。

+0

非常好,涵蓋所有方面。 +1 – 2011-01-30 23:03:40

+0

我使用Categories的原因是最終我將在數據中有幾個數組。我也沒有提供完整的PHP,但僅供參考,你是非常正確的!我正在使用標題(「Content-type:text/javascript」);而不是它實際上影響數據,據我所知。 – T9b 2011-01-30 23:12:05

2

你是否在解析JSON?它不會沒有工作。

var categoriesObject = JSON.parse(ajaxRequest.responseText);