2012-12-25 40 views
1

这里是我的test.json文件访问JSON文件的问题?

{ 
"pageTitle": "Test Page", 
"firstName": "Matt" 
} 

这里是我如何访问它在我的JS文件

var jsonObj = {}; 
var ajaxReq = new XMLHttpRequest(); 
ajaxReq.overrideMimeType("application/json"); 
ajaxReq.open('GET', 'path/to/file/test.json', true); 
ajaxReq.onreadystatechange = function() 
{ 
    if (ajaxReq.readyState == 4) 
    { 
     jsonObj = ajaxReq.responseText; 
     alert(jsonObj.pageTitle); 
    } 
} 
ajaxReq.send(null); 

但是当我运行该脚本的警告框说:“未定义”。任何人都可以告诉我我在做什么错在这里?我一直在这里工作了几个小时,似乎无法找到答案。感谢您的任何帮助。

+0

你必须解析JSON,或者它只是一个字符串。 –

+0

我试着做JSON.parse(ajaxReq.responseText)和FireBug抛出一个错误,说'SyntaxError:JSON.parse:意外的字符',警报框甚至没有弹出。 –

+0

文件开头是否有[隐藏的BOMs](http://en.wikipedia.org/wiki/Byte_order_mark)? –

回答

4

responseText属性是指包含响应文本的字符串。它不包含JavaScript对象,因此没有pageTitle属性。

由于字符串是JSON格式,它可以很容易地解析与JSON.parse方法的对象:

jsonObj = JSON.parse(ajaxReq.responseText); 
+0

我试着做JSON.parse(ajaxReq.responseText)和FireBug抛出一个错误,说'SyntaxError:JSON.parse:意外的字符',警报框甚至没有弹出。 –

+0

你问题中的JSON对我来说看起来很好。你可以将完整的JSON直接粘贴到http://jsfiddle.net或类似的文件中吗? –

+0

Nevermind ...我在JSON文件的JSON文本之上有一个JS注释。一旦我删除它,它运行良好。 –

-1

更新jsonObj = ajaxReq.responseText;跟随行,请尝试!

jsonObj = eval('(' + ajaxReq.responseText + ')');