嚕嚕噠
2023-10-14 18:34:54
我正在嘗試根據 url 中的值過濾 json 數組并獲取屬性vernacularName。在 F12 調試中,我可以輸入record[0].vernacularName;它,它給了我正確的變量,但下面的代碼仍然失敗。document.getElementById("demo").innerHTML = datasetID;有效但document.getElementById("demo").innerHTML = vernacularName;無效。最終我想添加 vernauralName 作為會話變量<body> <div class=""> <h3>testing data</h3> <p id="demo" class = 'pl-5'></p> </div><script type="text/javascript"> const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); const species = urlParams.get('species') const bone = urlParams.get('bone') const datasetID = urlParams.get('datasetID') var data; $.getJSON("json/data.json", function(json){ data = json; }); record = data.filter(r => r.datasetID == datasetID); var vernacularName = record[0].vernacularName; // const vernacularName2 = record.vernacularName; $_SESSION["v"] = vernacularName;</script><script>document.getElementById("demo").innerHTML = vernacularName;</script>
1 回答

慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
首先,我不確定為什么
document.getElementById("demo").innerHTML = vernacularName;
位于其自己的script標簽內。這看起來很奇怪。
無論如何,這里的問題是數據還沒有準備好。在數據返回給您之前,您無法開始處理數據并使用它來更新頁面上的元素。
這就是第二個參數的全部要點- 它是在獲取數據后getJSON成功調用的函數。
因此,其余代碼應該全部放在該函數內:
? $.getJSON("json/data.json", function(json) {
? ? const data = json;
? ? const record = data.filter(r => r.datasetID === datasetID);
? ? const vernacularName = record[0].vernacularName;
? ? $_SESSION["v"] = vernacularName;
? ? document.getElementById("demo").innerHTML = vernacularName;
? });
旁注:var
既然您似乎正在使用 ES6+,那么除非您有充分的理由,否則您不應該使用。let
代替使用。
添加回答
舉報
0/150
提交
取消