2011-01-30 6 views
5

나는 내가 여기에 뭔가를 놓친 것 같아 :echoed 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을 생성하면 안됩니다. 사용

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

    하거나

    echo json_encode($jsondata); 
    

    을 내가 Categories를 추가 할 이유가 표시되지 않습니다.

  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

관련 문제