我正在上学,我正在网上购买游戏,我可以使用HTML,CSS和JS,所以每个游戏都有一个带有信息的JS文件,这里是一个例如:
/*doom.js*/
var info = {
title : "doom",
price : "59.99",
off : "0%"
};
我的html页面就是那个:
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="games/functions.js"></script>
</head>
<body>
<label id="title"></label>
</body>
</html>
我的所有游戏都有这个页面,所以我使用GET方法来了解我需要阅读的文件。 (game.html?ID =末日)
我有这个代码来获取id并加载文件:
window.onload = function() {
id = getURLParameter('id');
loadGamefile("games/"+id+".js");
};
function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}
function loadGamefile(filename){
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", filename)
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref);
loadinformation();
}
function loadinformation(){
document.getElementById("title").innerHTML = info.title; //info.title is from the doom.js file
}
唯一的问题是他没有更改标签,但如果我在btml代码上放一个按钮并onclick我说它的loadinformation()他加载正常,但我想在页面加载时自动,这里是错误我从控制台获得:functions.js:22 Uncaught ReferenceError: info is not defined
,我想也许是因为浏览器没有时间加载文件,我不知道,有人能帮帮我吗?谢谢,抱歉我的英语。
答案 0 :(得分:2)
问题是您没有给浏览器解析新脚本的机会。您可以使用setTimeout
给它一点时间。
function loadGamefile(filename) {
// your other code goes here
setTimeout(function() {
loadinformation();
}, 500); // wait half of a second
}
理想情况下,您应该将数据存储在JSON文件中,然后使用AJAX加载它。有很多教程介绍了如何通过AJAX加载JSON。
正如@Bergi指出的那样,这个解决方案非常脆弱,并且依赖于500ms以下的脚本加载。相反,您可以listen for the load
event确保您在脚本准备就绪后立即使用该脚本。
function loadGamefile(filename) {
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", filename)
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref);
// Wait for the script to load
fileref.onload = function() {
loadinformation();
};
}