2011-01-30 11 views
5

私はここで何かが欠けていると思う:echo'd PHP AJAX経由で呼び出されたJSONが正確に何を返しますか?

を、私は、データベースからいくつかのデータを取得し、 $ jsondata =配列()JSON形式でそれを送り返すAJAXを使用しました。

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"はオブジェクトではないということです - それが何ではないか?私はこのようにアクセスすることさえできないということは私には分かりません:

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

私は間違っていますか?

+1

文字列をオブジェクトに解析する必要があります。問題のあるeval()を使用するか、JSONパーサーを使用してください。ここをクリックしてください:http://www.json.org/js.htmlサイドノート、jQueryのようなフレームワークは –

答えて

11
  1. JSONを手動で作成しないでください。用途:私はCategoriesを追加する理由は見当たらない

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

    か、単に

    echo json_encode($jsondata); 
    

  2. あなたはJSON.parse使用して、クライアント側でJSONをデコードする必要が(ほとんどのブラウザで利用可能にするだけでなく、scriptとして利用可能):

    var data = JSON.parse(ajaxRequest.responseText); 
    
  3. あなたは非常に正しいことをしたい場合は、

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

    あなたのPHPスクリプトに。

+0

に組み込まれています。 +1 –

+0

私がカテゴリーを使用した理由は、最終的に私はデータに複数の配列を持つことになるということです。私は完全なPHPを提供していませんでしたが、情報のためにあなたは非常に正しいです!私はheader( "Content-type:text/javascript")を使っていました。私が見る限り、実際にデータに影響を与えるわけではありません。 – T9b

2

JSONを正しく解析していますか?それなしでは動作しません。

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

ありがとう - 前の答えと同じですが、私は両方を選択できません - ごめんなさい! – T9b

+0

問題はありませんが、Felixが明らかに優れた答えを出しました。 – svens

関連する問題