2013-06-03 203 views
2

我有以下的代碼非常簡單剛剛讀取JSON文件:相對和絕對路徑的JavaScript

<html> 
<head> 
<meta charset="ISO-8859-1"> 
<title>JSON Test</title> 
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
<script> 
$(function() 
{ 
    alert (1); 
    $.getJSON('data/sample.json', function(json) 
    { 
     alert(2); 

    }); 
}); 
</script> 
</head> 
<body> 
    <div id="datadiv">This is the info: </div> 
</body> 
</html> 

我打開一個Tomcat服務器上上面的文件,並可以加載使用文件:http://myserver.com:8080/Html5_Test_1/jsonTest.html。上面的代碼工作,alert(2)被調用。但是,如果我將用於getJSON的路徑更改爲/Html5_Test_1/data/sample.json,則無法工作。

我認爲/Html5_Test_1/data/sample.json是data/sample.json的絕對路徑,並且應該可以工作。事實上,我已經嘗試了/data/sample.json,Html5_Test_1/data/sample.json,而且沒有任何作用。唯一可行的路徑是data/sample.json。

誰能告訴我什麼是錯的?絕對路徑/Html5_Test_1/data/sample.json肯定能用於Java。那麼,絕對和相對路徑的概念在JavaScript中有點不同嗎?

請注意,文件正在作爲服務器上的公用文件進行訪問,而不是作爲本地文件系統上的文件進行訪問。

+0

您是否已通過在瀏覽器的URL欄(http:// localhost:8080/Html5_Test_1/data/sample.json)上直接輸入地址進行確認?如果您查看瀏覽器開發工具的網絡選項卡,它會嘗試加載哪個URL? – JJJ

+0

是的,我已確認可以使用localhost:8080/Html5_Test_1/data/sample.json加載該文件。 – user1888243

+0

好的,你可以在將'/ Html5_Test_1/data/sample.json''指定爲URL時檢查'GET'請求的實際內容嗎?並將此行與'data/sample.json'請求發送的行進行比較。 – raina77ow

回答

1

data/sample.json和/Html5_Test_1/data/sample.json都應該可以正常工作。我認爲你的瀏覽器緩存有問題。清除瀏覽器的緩存並重試。

如果這不起作用,請嘗試使用其他瀏覽器。除非您的瀏覽器緩存混亂,否則我無法看到上述路徑無法正常工作的情況。

1

您似乎混合了絕對/相對文件系統路徑和絕對/相對URL。請記住,JavaScript是客戶端語言,它與託管其母版頁的服務器的文件系統無關。所以你寧願建立一個相對URL,考慮到它的出發點很可能是服務文件的路徑。

但是,爲什麼現在可以工作,您可能會問?檢查:

/Html5_Test_1/ 
.. data/ 
.... sample.json 
.. jsonTest.html 

...記住,因爲涉及到其中包含jsonTest.html文件目錄中的URL將被採取。很容易明白爲什麼適當的相對路徑是data/sample.json(或'./data/sample.json')。

如果你願意,你可以更改您的代碼是這樣的......

$.getJSON('file:///Html5_Test_1/data/sample.json', function(json) ...); 

...但是這顯然會使其無法使用任何其他機器比你的。

+0

我不認爲你甚至可以在你自己的電腦上使用AJAX從本地文件系統加載文件。 – JJJ

+0

儘管服務器顯然位於本地主機上,但文件sample.json正在作爲服務器上的文件訪問,而不是作爲本地文件系統上的文件訪問。 – user1888243

+0

@Juhana是的,即使這在某些瀏覽器(Chrome)中也受到限制。這些限制可能會被解除,但這不是重點:我試圖展示文件系統路徑和URL之間的區別。 – raina77ow