2014-04-09 226 views
1

是否有JavaScript方法/功能或創建方法/函數加載JSON文件的方式,JSON文件,該文件將而不需要一個回調參數文件加載後運行簡單地等待,然後返回JSON對象一次完全加載(無庫)?方法加載它返回JSON對象

例如,如果我的文件something.json包含以下內容:

{ 
    "name":"John Smith", 
    "age":"40" 
} 

而且我的JavaScript(在同一臺服務器上)如下:

var person = loadJsonFile("something.json"); 
console.log("Name: " + person.name); 
console.log("Age: " + person.age); 

我的控制檯將讀取:

Name: John Smith 
Age: 40 

我不能使用異步因爲這是一個函數內,我不能肯定什麼日說該方法的結果將被用於。另外,我不能這樣,因爲加載調用之後的所有方法都依賴於該調用的返回,並且由於該函數的作用域,我無法將其放入另一個函數中。

+2

要在瀏覽器中運行?你不想要這個。用戶的瀏覽器將顯示鎖定,直到您的服務器返回響應。 – meagar

+0

爲什麼你需要它是同步的? –

+1

你應該改變你的問題,問你真的想做什麼,因爲這是做錯的方法。這感覺就像一個XY問題http://mywiki.wooledge.org/XyProblem –

回答

0

創建這樣的方法(複製部分,給定的信用):

function loadJsonFile(file) 
{ 
    "use strict"; 
    //THIS PORTION IS COPIED FROM: http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_asyncfalse 
    var xmlhttp; 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.open("GET",file,false); //modified 
    xmlhttp.send(); 
    //END COPIED PORTION 
    return xmlhttp.responseText; 
} 
1

技術上,有可能同步加載JSON文件。該3rd argument of the open method of XMLHTTPRequest是一個布爾值:如果你將它設置爲false,該send方法不會返回,直到接收到響應。

有兩個嚴重的問題是:首先,瀏覽器將掛起,直到響應到達時,和第二,一些瀏覽器總是這樣的異步請求,獨立地該參數(例如火狐30+)的。不要害怕異步,使用回調。如果需要,您可以連接回調,例如參見here(本書是關於Node.js的,但本頁提到的技術也可以在客戶端JavaScript中使用)。

說實話,我用這種方法一次,當我不得不端口Firefox擴展到Chrome瀏覽器。我想實現功能require,該功能可以同步加載JavaScript模塊,並且這種方法是我能想出的唯一方法。