2012-12-25 44 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 + ')');