AJAX = Asynchronous JavaScript And XML. Merupakan kombinasi dari XMLHttpRequest dan JavaScript DOM. XMLHttpRequest digunakan untuk memanggil API, semanatar javascript DOM digunakan untuk mengolah dan menampilkan data hasil dari pemanggilan API.
Ajax dibagi menjadi tiga tahapan :
Membuat objek XMLHttpRequest
const xhttp = new XMLHttpRequest();
Membuat callback.
xhttp.onload = function() {
// lakukan manipulasi DOM ketika sudah mendapat response
}
Untuk persiapan dan bahan pembelajaran, saya sudah sediakan CRUD Rest API untuk digunakan, yaitu :
- GET /users
- POST /users
- GET /users/:id
- PUT /users/:id
- DELETE /users/:id
Url bisa diakses melalui : https://node-rest.rijalasepnugroho.com
List
Buat file list-user.html
<h1>AJAX - List User</h1>
<main></main>
<script>
function list() {
const xhttp = new XMLHttpRequest();
xhttp.onload = function() {
const tables = [];
tables.push(`
<tr>
<th>No</th>
<th>Nama</th>
<th>Umur</th>
</tr>
`);
users = JSON.parse(this.responseText);
let no = 1;
for (user of users) {
tables.push(`
<tr>
<td>${no}</td>
<td>${user.name}</td>
<td>${user.age}</td>
</tr>
`);
no++;
}
const html = `
<table>
${tables.join("")}
</table>
`
const parent = document.getElementsByTagName("main")[0];
parent.innerHTML = "";
parent.insertAdjacentHTML("beforeend", html);
};
xhttp.open("GET", "https://node-rest.rijalasepnugroho.com/users");
xhttp.send();
}
list();
</script>
Insert
Saat insert, method yang gunakan adalah "POST" dan saat send() kita mengirim data berupa string json.
xhttp.open("POST", "http://localhost:3000/users", true);
xhttp.send(JSON.stringify(user));
Kita akan membuat perubahan pada halaman Ajax dengan logik seperti berikut
Pada file list-user.html tambahkan button "Tambah User" yang jika diklik akan redirect ke halaman add-user.html
Buat halaman add-user.html yang berisi form.
Form dicegah untuk submit karena akan dihandle lewat ajax.
document.getElementById("form").addEventListener("submit", function(event){ event.preventDefault();
})
Buat fungsi add() untuk memangil ajax POST /users
Pada callback AJAX, dibuat pengecekan, jika response berhasil dan menghasilkan id, maka akan redirect kembali ke halaman list.
Ubah file list-user.html untuk menambahkan tombol "Tambah User".
<h1>AJAX - List User</h1>
<button onclick="location.href='./add-user.html'">Tambah User</button>
<main></main>
<script>
function list() {
const xhttp = new XMLHttpRequest();
xhttp.onload = function() {
const tables = [];
tables.push(`
<tr>
<th>No</th>
<th>Nama</th>
<th>Umur</th>
</tr>
`);
users = JSON.parse(this.responseText);
let no = 1;
for (user of users) {
tables.push(`
<tr>
<td>${no}</td>
<td>${user.name}</td>
<td>${user.age}</td>
</tr>
`);
no++;
}
const html = `
<table>
${tables.join("")}
</table>
`
const parent = document.getElementsByTagName("main")[0];
parent.innerHTML = "";
parent.insertAdjacentHTML("beforeend", html);
};
xhttp.open("GET", "https://node-rest.rijalasepnugroho.com/users");
xhttp.send();
}
list();
</script>
kadang kita ingin menjadikan halaman list dan add dalam satu halaman saja. Solusinya adalah membuat form tambah user dalam bentuk modal. Logic pembuatan single page adalah sebagia berikut :
Tambahkan modal form add-user dalam file list-user.html dalam keadaan hide.
Jika ada klik "Tambah User" maka tampilkan modal form add-user.
Setelah submit form tambah user maka modal kembali dihide dan load ulang fungsi list() untuk melakukan pembaruan data.