2016-05-23 2 views
1

Я делаю работу в школе, и я делаю онлайн-платофонн, чтобы покупать игры онлайн, я могу просто использовать HTML, CSS и JS, поэтому для каждой игры у меня есть файл JS с информациями, вот пример:Загрузите еще один файл JavaScript и acess var

/*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 знать файл Wich Мне нужно читать. (? Game.html ID = дум)

У меня есть этот код, чтобы получить идентификатор chosed и загрузить файл:

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 
} 

Единственная проблема, он DonT изменить метку, но если я поставить кнопку на btml-код и onclick я скажу, что его loadinformation() он загружается нормально, но я хочу, чтобы он автоматически загружался, и вот ошибка, которую я получаю с консоли: functions.js:22 Uncaught ReferenceError: info is not defined, я думаю, может быть, потому что браузер не успел загрузить файл, я не знаю, может кто-нибудь мне помочь? Спасибо и извините за мой английский.

ответ

2

Проблема в том, что вы не даете браузеру возможность проанализировать ваш новый скрипт. Вы можете дать ему минутку, чтобы сделать это, используя setTimeout.

function loadGamefile(filename) { 
    // your other code goes here 

    setTimeout(function() { 
     loadinformation(); 
    }, 500); // wait half of a second 
} 

В идеале, вы должны иметь данные, хранящиеся в файле JSON затем загрузить его с помощью AJAX вместо этого. Существует множество руководств по загрузке JSON поверх AJAX.

Как отметил @Bergi, это решение очень хрупкое и полагается на загрузку скрипта под 500 мс. Вместо этого вы можете 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(); 
    }; 
} 
+0

спасибо, но я просто могу использовать CSS CSS и JS, я попробую это. –

+0

Я пробовал этот код, но он все равно не работал. Вы знаете другой трюк? Я действительно хочу поставить это на работу –

+0

@ Азазель. Как насчет этого не получилось? –

Смежные вопросы