2010-04-03 3 views
0

내 js 코드는 단순히 내 서버에서 json 객체를 가져 오지만, 자동으로 구문 분석되어 속성을 가진 객체로 바뀌어야한다고 생각하지만 액세스가 제대로 이루어지지 않습니다.왜 json 데이터 형식을 사용해도 AJAX의 json 개체가 자바 스크립트에서 이해되지 않는 이유는 무엇입니까?

$.ajax({ 
     type: 'POST', 
     url: '/misc/json-sample.js', 
     data: {href: path}, // THIS IS THE POST DATA THAT IS PASSED IN; safe2ignore. 
     dataType: 'json', 
     success: function (datax) { 

    if (datax.debug) { 
    alert('Debug data: ' + datax.debug); 
    } else { 
     alert('No debug data: ' + datax.toSource() ) ; 
     } 

/misc/json-sample.js 파일이 : [{ "경로": "examplemodule/상위 1/자식 1/grandchild1", "제목": "첫 손자 옵션", "디버그" " 첫 번째 손자 옵션 ","어린이 "거짓}]

(I는 다음과 같이 드루팔에서 해당 개체를 반환하려고 노력하고 동일한 결과되었다.) 기타/JSON-sample.js의 드루팔 버전 :

합니다 (toSource() 기능이 FF에서) 어떻게됩니까 이
$items[] = array(
     'path' => 'examplemodule/parent1/child1/grandchild1', 
     'title' => t('First grandchild option'), 
      'debug' => t('debug me!'), 
     'children' => FALSE 
    ); 
    print drupal_to_js($items); 

없음 디버그 데이터 '에 경고입니다 : [{경로 : "예 "첫 번째 손자 옵션", 어린이 : false}] ' 감사합니다.

+0

나는 디버그 필드가 Drupal에서 반환 된 객체에 있기를 기대하지만,'/ misc/json-sample.js'에이 필드가 없습니까? 하드 코딩 된 js 파일에 필드를 추가하면 작동합니까? –

+0

죄송합니다. 잘못된 버전의 json-sample.js 파일과 경고 출력을 실수로 게시했습니다. 나는 그것을 고쳤다. – pete

답변

2

application/json으로 Content-Type 헤더를 설정해야합니다. .

header("Content-Type: application/json"); 
print drupal_to_js($items); 
+0

감사. Drupal 버전에서 Michael이 권장 한 변경 사항을 테스트했습니다. 이 지시어가 이제 헤더의 일부로 보이는 것처럼 보입니다./ra/js로 localhost에서 URL을 직접로드하면 FF가 "이 애플리케이션/json으로 FF로해야 할 것"이라고 묻습니다.하지만 jquery 앱은 여전히 ​​그렇지 않습니다. 결과를 올바르게 구문 분석하면 동일한 경고가 호출됩니다. – pete

+0

나는 그것을 얻었다 고 생각한다. [{ "path": "examplemodule/parent1/child1/grandchild1", "title": "첫 번째 손자 옵션", "디버그": "첫 번째 손자 옵션", "children": false}] 객체의 배열입니다! []가 없으면, dummy-filed가 올바르게 파싱되었다. 따라서 목록의 요소가 아니라 목록의 첫 번째 항목의 요소이기 때문에 아마 .debug를 잘못 참조하고있을 것입니다. – pete

관련 문제