[英]How do I simply make my JSON data accessible by my script?
我的目錄是這樣的
app/
index.html
script.js
data.json
聽起來不錯? 現在,我想從我的 JSON 數據中隨機選擇一個 object 並在每次加載我的文檔時將其呈現給用戶,好嗎? 現在我在第一部分有一個問題,以盡可能最佳的方式從我的data.json
中獲取數據。 我可以在我的script.js
中添加一個 XMLHttpRequest() 來獲取我的data.json
的內容,或者我什至會使用 fetch API,但我知道這些是為了“獲取”跨 Z2567A5EC9705EB7AC2DZE9840 的數據而設計的對於這樣一個簡單的任務,我的意思是你不需要發送 HTTP 請求來將你的 CSS 與你的 HTML 鏈接起來,對嗎? 所以我發現必須有一種方法可以輕松做到這一點,我發現的一個答案是將您的數據鏈接為<script id="data" src="./data.json" type="application/json"></script>
然后你可以document.getElementById("data")
它,但由於某種原因這對我不起作用,我提供的一種解決方法是將我的data.json
更改為data.js
並且只是為我的整個 JSON 數據添加一個var data =
前綴,然后將其導入我的index.html
,現在我可以從我的腳本中訪問變量data
,但我覺得這太老套了,不是/不應該是最佳的到 go 周圍。 我認為這觸及了 CORS/Same-origin 的主題,這是我對這個概念的掌握微弱。 非常感謝對這里發生的事情的詳細解釋:)
編輯:提供的答案僅涉及獲取 API,我的問題是為什么需要 HTTP 請求才能訪問本地文件? 為什么我們不能像其他所有內容一樣通過鏈接標簽鏈接 JSON 數據,例如我們的 HTML、CSS、JS,它們都使用鏈接/腳本標簽鏈接。
我想出了以下三種方法:
.json
文件我肯定會考慮使用Fetch API
(或XHR
)作為啟用 web 文檔從服務器檢索.json
文件的標准方法。
fetch('/app/data.json')
.then(response => response.json())
.then(json => console.log(json));
.js
文件而不是.json
文件 IE。 使用'/app/my-json-data.js'
而不是'/app/data.json'
正如您在問題中正確指出的那樣,您可以將.js
文件而不是.json
文件上傳到您的服務器,其中,如果您的原始 JSON 文件'/app/data.json'
看起來像這樣:
{"Name" : "Data", "Section 1" : {"A" : "a", "B" : "b"}, "Section 2" : ["C", "D"]}
那么您的 JS 文件'/app/my-json-data.js'
將如下所示:
let myJSONData = '{"Name" : "Data", "Section 1" : {"A" : "a", "B" : "b"}, "Section 2" : ["C", "D"]}';
然后,您可以使用以下命令將 JSON 字符串檢索到您的文檔中:
<script src="/app/my-json-data.js"></script>
之后,該字符串將作為變量myJSONData
存在於文檔的 javascript 全局 scope 中。
.json
文件(通過<object>
或<iframe>
)當我們之前討論時,我評論說:
我猜是因為 HTML 缺少像
<file type="application/json" src="/app/data.json" />
的東西(類似於<img src="/app/my-image.png" alt="My Image" />
)。
然后,我想知道這是不是真的。 事實證明,它不是。
這是從服務器檢索.json
的第三種方法:
HTML5 <embed>
<embed>
似乎已被鎖定,並且其contentDocument
無法訪問。 不清楚為什么。
HTML5 <object>
HTML:
<object data="/app/data.json" style="display: none"></object>
JS:
<script>
let myObject = document.getElementsByTagName('object')[0];
const getJSONFromObject = () => {
console.log(myObject.contentDocument.body.textContent);
}
myObject.addEventListener('load', getJSONFromObject);
</script>
HTML5 <iframe>
HTML:
<iframe src="/app/data.json" style="display: none"></iframe>
JS:
<script>
let myIframe = document.getElementsByTagName('iframe')[0];
const getJSONFromIframe = () => {
console.log(myIframe.contentDocument.body.textContent);
}
myIframe.addEventListener('load', getJSONFromIframe);
</script>
按照個人喜好,我喜歡的方法是:
Fetch
.json
文件XHR
.json
文件.js
文件而不是.json
文件<object>
在文檔中嵌入.json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.