2010-11-27 4 views
1

다음은 PHP 코드입니다. mongodb에서 콜렉션 목록을 얻고 있습니다.PHP json_encode는 실제 객체를 생성하지 않습니다/실제 객체에 배열 문자열을 만들거나 PHP 배열을 json으로 변환합니다.

$list = $db->dbname->listCollections(); 
$result = array(); 
$i=0; 
foreach ($list as $thiscollection) { 
    $result[$i++] = $thiscollection->getName(); 
} 
echo json_encode($result); 

콜백에서 console.log를 수행하며 이것이 내가 본 것입니다.

["fruits", "dogs", "cars", "countries"] 

문제는 이것이 배열이 아니라 문자열이라는 것입니다. 이 값들을 반복해야합니다. 어떻게 PHP를 실제 객체로 만들거나 php를 사용하여 php 배열 대신 json을 주면 parseJSON을 사용할 수 있습니다.

고마워.

js :

$.post('/ajax-database.php', function (data) { 
    console.log($.parseJSON(data)); 
    $.each(data, function (key, value) { 
     console.log(value); 
    }); 
}); 
+0

콘솔이 출력 할 경우 *는 * 배열입니다. – timdream

+0

@timdream isArray가 그렇지 않다고 말하면 @timdream. 나는 $ .each를 실행하려고 할 때 대괄호와 따옴표를 포함하여 모든 문자를 얻습니다. – Mark

+0

유선입니다. Javascript 기능을 게시 할 수 있습니까? jQuery가 json으로 데이터를 해석하도록 'echo'하기 전에'header ('Content-Type : text/javascript'); – timdream

답변

3

jquery를 사용하고있는 것을 볼 수 있습니다. 데이터가 json 객체로 돌아오고 싶다면 1/2 일을해야합니다.

  1. 추가 헤더 ("콘텐츠 유형 : 응용 프로그램/JSON") 당신의 PHP 파일이이 JSON 객체로 변환하는 대신 텍스트로

  2. 가 앞뒤로 매개 변수를 추가 할 jQuery를 말할 것이다 을 $ .post, PHP 코드 대신에 실패하고 출력 HTML 경우처럼, 그 NOT JSON 경우 오류 처리기를 호출하는 jQuery를 말할 것이다

     
    $.post('/ajax-database.php', function (data) { 
        console.log($.parseJSON(data)); 
        $.each(data, function (key, value) { 
         console.log(value); 
        }); 
    }, "json"); 
    

. 당신은 정말로 $ .ajax를 사용해야한다. 나는 왜 누군가가 $ .post를 사용하는지 잘 모른다. 어떤 의미있는 에러 핸들링도 할 수 없다.

+0

+1이 당신의 것을 보았을 때 대략 게시했습니다 – Philar

+0

jQuery.post()로 요청하면 에러 코드가 반환됩니다. 스크립트가 전역 호출을하지 않으면 자동으로 실패합니다.ajaxError() 메소드. - http://api.jquery.com/jQuery.post/ – ajreal

+0

예, 저는 각기 다른 스크립트가 오류를 범할 수 있고 오류가 다르게 나타날 수 있으므로 오류를 전역 적으로 처리하는 것이 좋지 않다고 생각합니다. – Rahly

0

JSON 문자열입니다. 당신이 그것을 반복 할 수 있기를 원한다면 당신은 그것을 디코딩 할 필요가 있습니다.

+0

네,하지만 문제는 그것이 json이 아니라는 것입니다. 그것은 대괄호를 가지고 있습니다. – Mark

+0

예, 그렇습니다. 최상위 값은 객체 일 필요는 없습니다. –

+0

@ 마크 : []는 단지 배열을 의미하고, 모든 배열은 자바 스크립트 ARE 객체에 있음을 기억하세요. 프로토 타입이 있습니다. – Rahly