#javascript #html
Вопрос:
Я пытаюсь вызвать API, а затем распечатать ответ внутри тега div. Возможно, было бы легко сделать это с помощью jQuery, но я стараюсь этого избежать. В настоящее время загружается только пустая страница.
<body>
<div id="OnLoad"></div>
<script>
function myFunction() {
fetch('https://jsonplaceholder.typicode.com/posts')
.then((res) => res.json())
.then((data) => {
console.log(data);
document.getElementById('OnLoad').innerHTML = data;
})
}
</script>
</body>
Я попробовал сделать следующее, но это не сработало.
document.getElementById('OnLoad').addEventListener('load', myFunction)
<div id="OnLoad" onload="myFunction()"></div>
В принципе, я могу исправить это, вызвав функцию внутри тега сценария. Но есть ли какой-либо способ вызвать его напрямую из тега div.
Любая помощь будет признательна.
Ответ №1:
Элементы Div не загружают внешний контент. Поскольку они ничего не загружают: у них нет события загрузки.
Просто позвоните myFunction
сразу после конечного тега для div… или не используйте функцию.
<div id="OnLoad"></div>
<script>
fetch('https://jsonplaceholder.typicode.com/posts')
.then((res) => res.json())
.then((data) => {
console.log(data);
document.getElementById('OnLoad').innerHTML = data;
});
</script>
Ответ №2:
<body>
<div id="OnLoadBefore">
<!-- This throws error as myFunction is not yet defined -->
<script>myFunction('OnLoadBefore')</script>
</div>
<script>
function myFunction(selector) {
document.getElementById(selector).innerHTML = "Test Div Load";
}
</script>
<div id="OnLoadAfter">
<!-- This executes myFunction as myFunction is defined -->
<script>myFunction('OnLoadAfter')</script>
</div>
</body>
Лучше всего проводить такие события с событиями onload, когда все ресурсы страницы доступны, window.onload = function() { myFunction() }
зарегистрируют функцию для выполнения при загрузке. тег тела html допускает событие onload. Смотрите фрагмент ниже…
function myFunction(selector) {
document.getElementById(selector).innerHTML = "Test Div Load";
}
function onLoad() {
myFunction('OnLoadBefore');
myFunction('OnLoadAfter');
}
<body onload="onLoad()">
<div id="OnLoadBefore"></div>
<div id="OnLoadAfter"></div>
</body>