为什么我的AJAX json对象没有被javascript理解,即使使用'json'dataType?
我的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}]' 谢谢
您需要将Content-Type标头设置为application/json 。
header("Content-Type: application/json");
print drupal_to_js($items);
谢谢。我测试了Michael在drupal版本中推荐的更改。它似乎这个指令现在是头的一部分,因为当我直接从localhost加载URL为/ ra/js,然后FF问我“FF应该怎么做这个应用程序/ json” - 但jQuery应用程序仍然不正确解析结果并调用相同的警报。 – pete 2010-04-03 20:05:08
我想我已经明白了。 [{“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
我很困惑,你期待的调试领域是从你的Drupal返回的对象,但你没有在'/其它/ JSON-sample.js'这个领域?如果将该字段添加到硬编码的js文件中,它会起作用吗? – 2010-04-03 19:45:34
对不起,我错误地发布了json-sample.js文件和警报输出的错误版本。我修正了这一点。 – pete 2010-04-03 19:56:38