Я попробовал то, что сказал в своем комментарии, и это работает.
Когда вы запускаете document.getElementById('innerContainer').innerHTML = "Hello World";
в своем коде, этот элемент, вероятно, не существует (отсюда и ошибка 'null'). Вы должны помнить, что вы делаете асинхронный запрос. Таким образом, другие части кода будут выполняться во время выполнения запроса.
Одним из решений является перемещение текста приветствия внутри ответа. Так что это работает:
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"></head>
<body>
<div id="outerContainer"></div>
<script>
function request(){
var req = new XMLHttpRequest();
req.open("get", "random.php", true);
req.onreadystatechange=function(){
if(this.readyState == 4 && this.status == 200)
document.getElementById('outerContainer').innerHTML = this.responseText;
document.getElementById('innerContainer').innerHTML = "Hello World";
};
req.send();
}
request();
</script>
</body>
</html>
Как вы можете видеть, Hello World только тогда вставляется, как только элемент действительно существует. Тогда нет шансов на несуществующий div.