Проблема заключается в том, что вы объявляете все свои переменные и функции в одной области. Поэтому, когда выполняется код в обучающем блоке, он перезаписывает xmlhttp
переменную и в результате выполняется только код в этом блоке. ou может либо переименовать xmlhttp
в учебный блок на что-то другое или, лучшее решение, использовать шаблон модуля и поместить оба блока в отдельные IIFE (сразу вызываемое выражение функции):
<script>
(function () {
var xmlhttp = new XMLHttpRequest();
var url = "training.json";
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState === 4 && xmlhttp.status == 200) {
var json_in = JSON.parse(xmlhttp.responseText);
load_json(json_in);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
function load_json(data) {
console.log("Showing Training data");
console.log(data);
var out = "";
var i;
for (i = 0; i < data.courses.length; i++) {
out += "<tr><td width="20%">" + data.courses[i].Course + "</td><td width="10%">" + data.courses[i].Website + "</td><td width="35%">" + data.courses[i].URL + "</td><td width="35%">" + data.courses[i].Description + "</td></tr>";
}
document.getElementById("train").innerHTML = out;
}
})();
</script>
Таким образом, у вас будут отдельные области и отсутствие конфликтов имен.