index.html
<button id="load">Загрузить пост</button>
<article id="post"></article>
<script type="module">
import { tplPost } from './view.js';
const $btn = document.getElementById('load');
const $post = document.getElementById('post');
$btn.addEventListener('click', async () => {
try {
const res = await fetch('https://jsonplaceholder.typicode.com/posts/1');
if (!res.ok) throw new Error('HTTP ' + res.status);
const data = await res.json();
$post.innerHTML = tplPost(data);
} catch (e) {
$post.textContent = 'Ошибка: ' + e.message;
}
});
</script>
view.js
export const tplPost = ({ title, body }) => `
<h2>${escapeHtml(title)}</h2>
<p>${escapeHtml(body)}</p>
`;
function escapeHtml(s=''){
return s.replace(/[&<>"']/g, m =>
({'&':'&','<':'<','>':'>','"':'"',"'":'''}[m]));
}