2011-12-16 216 views
2

我拼命嘗試獲取本地構建的網站以獲取JSON文件(也是本地),但沒有運氣。確切的代碼在我的服務器上完美工作,但一旦本地,就會中斷。

我得到的JSON使用jQuery像這樣:

$.getJSON(
"lib/js/app.json", 
    function(data){ 
     $.each(data, function(i,user){ 
     +'<img src="'+user.thumbnail+'"/> 
     }); 
     } 
); 

而且收到此控制檯錯誤:

XMLHttpRequest cannot load file://localhost/Users/blakestruhs/new/lib/js/app.json. Origin null is not allowed by Access-Control-Allow-Origin. 

我真想一個答案在這裏。請幫幫我。

+1

`file:// localhost`是一個奇怪的組合。你有一個網絡服務器? – pimvdb 2011-12-16 10:49:32

+0

我這樣做,它在網上工作很好,但我正在一個沒有互聯網接入的建築物(我知道瘋了)做這個問題。 – Alexander 2011-12-16 10:51:10

+0

首先,我認爲本地文件由於來源不同會導致安全異常。除此之外,我沒有看到你的`file:// localhost`來自哪裏。當使用`file://`或`http:// localhost/...`時,它應該是一個本地路徑。 – pimvdb 2011-12-16 10:52:37

回答

-1

您應該使用http://localhost超過file://localhost;

$.getJSON(
"http://localhost/Users/blakestruhs/new/lib/js/app.json", 
    function(data){ 
     $.each(data, function(i,user){ 
     +'<img src="'+user.thumbnail+'"/> 
     }); 
     } 
); 
0

XmlHttpRequest不允許跨域。

如果您需要在本地PC上進行演示,請將您的Web應用程序設置爲在本地Web服務器上運行,並讓json源代碼返回爲相同的Web應用程序。

這是我能想到使它工作的唯一途徑。出於安全原因,您不能在文件系統上使用Ajax調用。

1

JSON已加載通過HTTP協議而不是本地文件協議。

跨域投訴是它會將每個文件視爲不同的域,因此您需要在Web服務器中運行它。

要麼建立一個本地網絡服務器,要麼將您的JSON存儲在變量中,而是完全跳過getJSON。

0

我認爲,如果你訪問的IP地址調用的getJSON頁上,然後使用,而不是本地主機的JSON文件中的IP地址,有效它們屬於同一個域,它應該工作

1

瀏覽器沒有按」允許對本地文件進行ajax調用。請參考This

0

而不是使用getJSON,對於支持它的瀏覽器(包括Chrome),您可以使用FileReader API。

var r = new FileReader(); 
r.onload = function(e) { 
     var obj = JSON.parse(e.target.result); 
     // do what you will with the object 
} 
// Start the async read 
r.readAsText(file); 

注意文件變量需要一個文件或Blob對象。最簡單的方法是讓用戶從文件輸入元素中選擇它。如果您需要在不詢問用戶的情況下閱讀文件,則可以查看:https://stackoverflow.com/a/30896068/2476389