2012-10-15 127 views
1

我做了一個腳本,它從json文件獲取數據並解析它。它在Web服務器上工作。getjson變量替代方法

但現在我必須找到解決方案,讓它在本地文件(file:///C:/xampp/htdocs/script/index.html)上工作,而不是在服務器上。它只適用於FF:

$.getJSON('data2.json', function(data) { 
    $.each(data.selection_form.entities, function(i,name){ 
     ...do something 
    }); 
}); 

任何想法?本地網絡服務器不是解決方案。

回答

0

通過爲$.ajax()函數指定dataType「jsonp」,可以強制jQuery通過JSONP加載文件。這會讓你的瀏覽器創建一個<script>標籤來加載文件,而不是依賴於XmlHttpRequest。但是,您需要將數據包裝在回調函數中。

注:雖然你可以使用$.getJSON(..)通過JSONP加載你的數據,你不能指定明確的回調函數(這是需要加載一個靜態文件,如jQuery使用不斷變化的回調函數的名稱)。

您的代碼:

$.ajax({ 
    url: 'data2.json', 
    dataType: 'jsonp', 
    jsonpCallback: 'mycallback', 
    jsonp: false, 
    success: function(data){ 
     $.each(data.selection_form.entities, function(i, name) { 
      ... do something 
     } 
    } 
}); 

通知jsonpCallback: 'mycallback'在這裏,我們將在呼叫包裹從原來data2.json文件中的數據到一個名爲mycallback功能:

mycallback({ /* your data */ }); 
+0

通過這樣做我在鉻中得到以下錯誤: –

+0

鉻給這個erormessage: XMLHttpRequest無法加載文件:////C:/xampp/htdocs/script/data2.json?callback = mycallback。 Access-Control-Allow-Origin不允許Origin null。 –

+0

我剛編輯我的解決方案,你還會得到這個錯誤嗎? – JasonWyatt

0

這裏的另一種選擇。

我們可以打造出自己JSONP,對於一次性的解決方案:

function mycallback(data){ 
    $.each(data.selection_form.entities, function(i,name){ 
     ...do something 
    } 
} 

$('body').append('<script src="data2.json" type="text/javascript"></script">'); 

這本質,jQuery的是如何做的 - 而是一大堆不太複雜。

+0

資源解釋爲腳本,但與MIME類型文本/平原:「file:/// C:/ xampp/htdocs /腳本/ data2.json」傳輸。 index.html:52 Uncaught ReferenceError:mycallback未定義 「我在想是錯的。 –