Skip to content

June 3, 2009

4

Mengatasi error http dan session timeout di AJAX

AJAX bener2 merubah cara untuk membuat aplikasi web. Ketika aku brosing2 internet kapan hari itu, rata2 web yang saya lihat sudah memakai ajax. Membuat aplikasi AJAX sama gampang nya menulis kode javascript dan sedikit kode pemrograman di server.

Salah satu hal yang paling sulit dalam membangun aplikasi AJAX adalah mengatasi error dan exception. Session timeout adalah hal yang paling banyak menimbulkan error yang butuh perhatian sendiri waktu membuat aplikasi dengan AJAX.

Sederhananya, kita gunakan ajax untuk mengirimkan konten HTML ke bagian DIV atau SPAN dan menampilkannya di layar. Tapi bagaimana jika request yang kita kirim dengan AJAX ternyata error karena session habis dan error session timeout terkirim di bagian DIV. Error apapun yang di hasilkan server misalnya http 404 error atau http 505 dapat terpampang jelas di layar kita. Tentunya itu sangat mengurangi keindahan tampilan kan.?

Handle Session timeout errors

Solusi yang dapat kamu pakai untuk mengatasi error session timeout adalah dengan menggunakan JSON atau XML format sebagai output untuk AJAX request. Selain itu kamu juga harus mengecek session di script kamu, berikut ini contoh pengecekan session dengan JSP.

if(null == session || session.getAttribute("SOME_ATTR_THAT_I_PLACED_IN_SESSION")) {
isSessionNull = true;
}
...
{
<%
if(isSessionNull) {
out.println("status: error");
}
else {
out.println("status: success");
}
%>
}

Singkatnya, buat field status di script JSON atau tag di XML yang mendefinisikan status request. Sementara ini aku lagi nyari cara yang sip buat ngecek session timeout dengan AJAX.

Handle Server HTTP errors di AJAX

Error HTTP seperti 404, 503, sering kali cukup susah di tangani dengan AJAX. Ada cara yang simple untuk masalah ini. Pertama kita lihat fungsi AJAX sederhana yang biasa kita pakai untuk mengambil response XML / teks lewat AJAX.


        xhr.open("GET", "http://someurl",true);
	xhr.onreadystatechange = handleHttpResponse;
	xhr.send(null);
	...
        ...
        function handleHttpResponse() { if (xhr.readyState == 4) {
	//handle response your way
	spanBodyContent.innerHTML = xhr.responseText;
 }
}

Fungsi Ajax normal memiliki pengecekan if  untuk readyState dan jika samadengan 4 (status respon diterima) maka kita akan mendapat respon dari xhr.responseText atau xhr.responseXML.

Objek XMLHttpRequest AJAX punya atribut untuk mengecek status dari request http kamu. kamu bisa makai atribut status dan statusText untuk bisa mengetahuinya.

xhr.status
..
xhr.statusText

Lalu dengan mengecek atribut dari objek xhr AJAX bisa mengatasi masalah kamu.

xhr.open("GET", "http://someurl", true);
xhr.onreadystatechange = handleHttpResponse;
xhr.send(null);
...
...
function handleHttpResponse() {
	if (xhr.readyState == 4) {
		try {
		if(xhr.status == 200) {
			//handle response your way
			spanBodyContent.innerHTML = xhr.responseText;
		}
		}catch(e) {//error}
	}
}

Lalu jika status tidak samadengan 200, kamu mungkin tidak mau mengupdate DOM kamu dengan hasil ajax yang error dan menampilkan ke web kamu.