2010-04-03 55 views
0

我的js代碼只是從我的服務器獲取json對象,但我認爲它應該被自動分析並轉換爲具有屬性的對象,但它不允許正確訪問。爲什麼我的AJAX json對象沒有被javascript理解,即使使用'json'dataType?

$.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/parent1/child1/grandchild1」, 「標題」: 「第一孫子選項」, 「調試」:「第一個孫子的選項」,‘孩子’:假}]

(我也一直試圖從Drupal的返回對象如下,相同的結果。)其它/ JSON-sample.js的 Drupal的版本:

$items[] = array(
     'path' => 'examplemodule/parent1/child1/grandchild1', 
     'title' => t('First grandchild option'), 
      'debug' => t('debug me!'), 
     'children' => FALSE 
    ); 
    print drupal_to_js($items); 

發生了什麼(在具有toSource()功能的FF中)是'No debug data:[{path:「ex 「amplemodule/parent1/child1/grandchild1」,標題:「First grandchild option」,debug:「First grandchild option」,children:false}]' 謝謝

+0

我很困惑,你期待的調試領域是從你的Drupal返回的對象,但你沒有在'/其它/ JSON-sample.js'這個領域?如果將該字段添加到硬編碼的js文件中,它會起作用嗎? – 2010-04-03 19:45:34

+0

對不起,我錯誤地發佈了json-sample.js文件和警報輸出的錯誤版本。我修正了這一點。 – pete 2010-04-03 19:56:38

回答

2

您需要將Content-Type標頭設置爲application/json 。

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

謝謝。我測試了Michael在drupal版本中推薦的更改。它似乎這個指令現在是頭的一部分,因爲當我直接從localhost加載URL爲/ ra/js,然後FF問我「FF應該怎麼做這個應用程序/ json」 - 但jQuery應用程序仍然不正確解析結果並調用相同的警報。 – pete 2010-04-03 20:05:08

+0

我想我已經明白了。 [{「path」:「examplemodule/parent1/child1/grandchild1」,「title」:「First grandchild option」,「debug」:「First grandchild option」,「children」:false}]是一個ARRAY對象!沒有[],.js虛擬字段被正確解析。因此,我可能引用.debug錯誤,因爲這不是列表中的元素,而是列表中第一項的元素。 – pete 2010-04-03 20:17:18

相關問題