2010-04-03 58 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

相关问题