Senin, 10 Agustus 2015

Belajar Ajax tanpa jQuery (part3)

Setelah kemarin kita sudah belajar tentang XMLHttp dan pengiriman request ke server menggunakan method POST dan GET. Sekarang, kita akan belajar bersama tentang "Respon Server".

Respon Server

Untuk mendapatkan respon dari server, kita dapat menggunakan responeText atau responeXML. Sekedar penjelasan, responText berarti kita menerima balasan dari server dalam bentuk text, sedangkan responeXML berarti kita menerima balasan dari server dalam bentuk data XML. Silahkan kalian pilih dengan bijak yang mana yang akan kalian gunakan.

Menggunakan ResponeText

Jika balasan dari server berupa teks dan bukan data XML, maka gunakan responeText. ResponeText akan mengembalikan bentuk data dari server menjadi teks. Seperti yang saya gunakan pada contoh di part pertama.

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

Menggunakan ResponeXML

Jika balasan dari server bukan berupa teks dan kalian ingin menguraikannya menjadi XML, maka gunakan responeXML. Sebagai contoh, kita akan menggunakan contoh yang sudah ada di w3schools.com. yaitu menggunakan data xml cd_catalog.xml dan kode html :

<!DOCTYPE html>
<html>
  <head>
    <script>
      function loadXMLDoc(){
        var xmlhttp;
        var txt,x,i;
        if(window.XMLHttpRequest){
          xmlhttp=new XMLHttpRequest();
        }else{
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function(){
          if (xmlhttp.readyState==4 && xmlhttp.status==200){
            xmlDoc=xmlhttp.responseXML;
            txt="";
            x=xmlDoc.getElementsByTagName("ARTIST");
            for (i=0;i<x.length;i++){
              txt=txt + x[i].childNodes[0].nodeValue + "<br>";
            }
            document.getElementById("myDiv").innerHTML=txt;
          }
        }
      xmlhttp.open("GET","cd_catalog.xml",true);
      xmlhttp.send();
      }
    </script>
  </head>
  <body>
    <h2>My CD Collection:</h2>
    <div id="myDiv"></div>
    <button type="button" onclick="loadXMLDoc()">Get my CD collection</button>
  </body>
</html> 

Event onreadystatechange

Ketika perminataan ke server dikirim, kita bisa melakukan  beberapa tindakan berdasarkan respon dari server.
Event onreadystatechange akan ter-eksekusi setiap ada perubahan readyState.
Properti readyState itu membawa status dari XMLHttpRequest.

PropertiDeskripsi
onreadystatechangeSebuah fungsi yang otomatis akan terpanggil tiap kali property readyState berubah
readyStatePemegang status dari XMLHttpRequest, Berubah dari 0 sampai 4
0 : Request di-inisialisasikan
1 : Koneksi ke server didirikan
2 : Permintaan diterima server
3 : Permintaan diproses server
4 : Permintaan telah diterima dan respon siap
Status200 : OK
404 : PNF(Page Not Found)
Kita dapat menentukan readiState dan status-nya di :


xmlhttp.onreadystatechange=function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200){
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
  }
}
Note : event onreadystatechange dieksekusi sebanyak lima kali (0-4), yaitu setiap perubahan pada readyState.

Callback

Callback adalah fungsi yang menyalurkan parameter ke fungsi lain.

Jika kita memiliki lebih dari satu tugas AJAX di website kita, maka kita harus membuat satu fungsi standar untuk menciptakan objek XMLHttpRequest, dan memanggilnya untuk setiap tugas AJAX.
 
Fungsi yang dipanggil harus berisi URL dan apa yang harus dilakukan pada onreadystatechange (yang mungkin berbeda untuk setiap panggilan). Ini tentunya sangat berguna untuk menyingkat waktu penulisan code bukan?

Sekian untuk hari ini. Tapi, untuk kalian yang belum memahami tentang callback bisa melihat contoh callack dari www.w3schools.com ini :



<!DOCTYPE html>
<html>
<head>
<script>
var xmlhttp;
function loadXMLDoc(url,cfunc)
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=cfunc;
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
function myFunction()
{
loadXMLDoc("ajax_info.txt",function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  });
}
</script>
</head>
<body>

<div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="myFunction()">Change Content</button>
</body>
</html>

Semoga bermanfaat.
Kali ini gak ada contoh yang bisa di-download lagi.

Sabtu, 08 Agustus 2015

w3.css

Sesuai judulnya, hari ini kita akan berkenalan dengan w3.css. Untuk yang sudah kenal, tetep lanjut baca juga boleh.

Apa itu w3.css ?

So, w3.css adalah... framework seperti bootstrap yang berfungsi untuk memudahkan pembuatan website. W3.css ini bisa dibilang baru lahir, karena versi 1.1 baru rilis bulan juni kemarin. Dan saat saya menulis postingan ini, versi terbaru w3.css adalah 1.35. Kalian dapat mengunjungi link ini untuk mengunduh versi terbaru dari w3.css.

Bagi yang gak mau repot buat css untuk desain form ataupun template kalian, bisa mulai belajar menggunakan w3.css di sini. Tidak susah kok. Namun, akan labih baik kalau kalian sudah paham css terlebih dahulu.

Menurut saya kelebihan dari w3.css adalah tidak memerlukan jQuery ataupun JavaScript library. Jadi, w3.css itu murni hanya menggunakan css. Yup! Murni css. Dan w3.css hanyalah satu file css yang berukuran 20kb!

Meski begitu, w3.css tidak menyelesaikan semua permasalah desain ada. Namun sudah cukup bagus untuk desain yang tidak terlalu rumit.
Faster and More Beautiful
Responsive Web Sites
Inspired by Google Material Design

Jumat, 07 Agustus 2015

CSS :before dan :after

Pernahkah terpikirkan dalam benak kalian tentang menambahkan suatu kalimat pada sebuah paragraf menggunakan css? Jujur saja, tidak pernah terlintas dalam benak saya tentang hal semacam itu. Tapi, ternyata itu ada dan mungkin untuk dilakukan. Tertarik? Lanjutkan...

Yaitu before dan after. Fungsinya mirip dengan DOM yang innerHTML, tapi beda. Karena before dan after hanya menyisipkan kalimat pada awal atau akhir kalimat di dalam suatu tag. Seperti namanya, before berarti menyisipkan di awal kalmat dan after menyisipkan di akhir kalimat.
Sekarang, kita langsung praktik.

Ini adalah kalimat yang asli.


Kemudian css-nya.

<style type="text/css">
  p:before{
    content:"Ini kalimat dari before. ";
  }
</style>
 Hasilnya :

Ini kalimat before. Ini adalah kalimat yang asli.

Kalau yang after, tinggal ganti aja before menjadi after.

<style type="text/css">
  p:after{
    content:" Ini kalimat dari after.";
  }
</style>
Hasilnya :

Ini adalah kalimat yang asli. Ini kalimat dari after.
Digunakan secara bersamaan juga bisa.

<style type="text/css">
  p:before{
    content:"Ini kalimat dari before. ";
  }
  p:after{
    content:" Ini kalimat dari after.";
  }
</style>
Hasilnya :

Ini kalimat dari before. Ini adalah kalimat yang asli. Ini kalimat dari after.
Baik before ataupun after, kalimat yang akan kita sisipkan terletak pada content. Dan jangan lupa diapit tanda petik dua (""). Bagaimana kalau menyisipkan tag? Saya pernah mencobanya, tapi tidak berhasil. Karena fungsi css kan bukan untuk menyisipkan (mengedit) konten html. Tapi, bisa dilakukan dengan jQuery. Lain kali akan saya jelaskan yng menggunakan jQuery.

Kamis, 06 Agustus 2015

Belajar css clip

Pernah mendengar tentang css yang namanya clip? Yup. Menurut saya, clip itu sama seperti masking. Yaitu menampilkan sebagian dari seluruh objek. Css ini biasanya digunakan pada gambar ataupun div. Sintaksnya seperti ini :

clip: rect(top, right, bottom, left);

Sintaks rect di atas berarti kotak. Maksudnya, kita akan me-masking berdasarkan ukuran kotak tersebut.Oh iya, saya sarankan objek yang di-masking position-nya bernilai absolute. Sebagai contoh, kita akan menggunakan gambar di bawah :



Tapi sebelumnya, kita buat div yang akan menampung gambarnya dulu. Kemudian gambarnya.

<div class="kotak">
  <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSDe02Peeftg3Bhz7FflQ1UlUtfC6bM0P09Phyphenhyphenv4TKqaLlLPr_KH-d5IM0Y-LGfr9X21Z-4jCMtcH10dapOSA78vCuQZURITkE3AIeXfvhAdyCs7t-OGqIJxcxZKwQO3lqD0l7VQJC-ABp/s1600/xxx.jpg">
</div>
Setelah itu, css-nya.

<style type="text/css">
.kotak{
  width: 500px;
  height: 428px;
  border: solid 2px lime;
  background-color: gray;
}
.kotak img{
  position: absolute;
  clip: rect(50px,250px,210px,75px);
}
Kalau digabungin, lengkapnya menjadi seperti ini :

<!doctype html>
<html>
<head>
  <title>clip</title>
  <style type="text/css">
  .kotak{
    width: 500px;
    height: 428px;
    border: solid 1px lime;
    background-color: gray;
  }
  .kotak img{
    position: absolute;
    clip: rect(50px,250px,210px,75px);
  }
  </style>
</head>
<body>
  <div class="kotak">
    <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSDe02Peeftg3Bhz7FflQ1UlUtfC6bM0P09Phyphenhyphenv4TKqaLlLPr_KH-d5IM0Y-LGfr9X21Z-4jCMtcH10dapOSA78vCuQZURITkE3AIeXfvhAdyCs7t-OGqIJxcxZKwQO3lqD0l7VQJC-ABp/s1600/xxx.jpg">
  </div>
</body>
</html>



Bagaimana, menarik bukan?

Ingat! Jangan biarkan right dan atau bottom bernilai nol. Jika salah satu atau keduanya bernilai nol, maka gambar atau div yang di-masking akan menghilang (gak kelihatan). Tentang berapa nilai yang harus digunakan untuk top, right, bottom, dan left, silahkan ber-eksperimen sendiri. Dengan begitu, kalian akan lebih paham.
top-nya bernilai nol.

clip: rect(0px,250px,210px,75px);


left-nya bernilai nol.

clip: rect(50px,250px,210px,0px);


right-nya bernilai nol. Atau bottom-nya bernilai nol.

clip: rect(50px,0px,210px,75px);

clip: rect(50px,250px,0px,75px);


Kalau menurut saya, right harus lebih besar daripada left dan bottom harus lebih besar daripada top. Kalian juga bisa menambahkan efek hover ataupun animasi. Sekarang, kita coba buat efek hover. Cukup menambahkan

transition: all 2s ease-in-out;

.kotak img:hover{
  clip: rect(0px,500px,428px,0px);
}
Hasil penambahannya menjadi seperti ini :

<!doctype html>
<html>
<head>
  <title>clip</title>
  <style type="text/css">
  .kotak{
    width: 500px;
    height: 428px;
    border: solid 1px lime;
    background-color: gray;
  }
  .kotak img{
    position: absolute;
    clip: rect(50px,250px,210px,75px);
  }
  </style>
</head>
<body>
  <div class="kotak">
    <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSDe02Peeftg3Bhz7FflQ1UlUtfC6bM0P09Phyphenhyphenv4TKqaLlLPr_KH-d5IM0Y-LGfr9X21Z-4jCMtcH10dapOSA78vCuQZURITkE3AIeXfvhAdyCs7t-OGqIJxcxZKwQO3lqD0l7VQJC-ABp/s1600/xxx.jpg">
  </div>
</body>
</html>


Kalau mau yang lebih bagus, silahkan gunakan imajinasi kalian untuk berkreasi. Selamat berkreasi.... Masih bingung? silahkan download contohnya di sini.

Rabu, 05 Agustus 2015

Belajar Ajax tanpa jQuery (part2)

Kemarin kita udah sampai pada syntax untuk mengirim data ke server menggunakan open() dan send(). Tetapi, ada pilihan menggunakan method GET atau  POST. Jadi, kita menggunakan yang mana? Seperti kata favorit guru saya di sekolah, "timbul, pertanyaan."

GET ATAU POST?

Saya lebih merekomendasikan menggunakan GET, karena lebih sederhana dan cepat dibandingkan dengan POST. Selain itu, GET juga bisa digunakan dalam banyak kasus.

Meski begitu, lebih baik menggunakan POST ketika : 
  • File cache bukanlah pilihan untuk digunakan (memperbarui file atau database di server)
  • Mengirim data yang berukuran besar ke server (POST tidak memiliki keterbatasan ukuran)
  • Mengirim input pengguna (yang dapat berisi karakter yang tidak diketahui), POST lebih kuat dan aman daripada GET

 MENGGUNAKAN GET

Contoh :

xmlhttp.open("GET","demo_get.php",true);
xmlhttp.send();
 
Dengan contoh di atas, mungkin kita akan mendapatkan hasil cache.
Untuk menghindariya, bisa ditambahkan ID unik ke URL seperti ini (saya sandiri kurang paham) :

xmlhttp.open("GET","demo_get.php?t=" + Math.random(),true);
xmlhttp.send();

Kalau untuk mengirim informasi menggunakan GET, tambahkan informasi ke dalam URL.

xmlhttp.open("GET","demo_get2.php?nama=Bayu&alamat=Jateng",true);
xmlhttp.send();

MENGGUNAKAN POST

Contoh penggunaan POST yang sederhana.

xmlhttp.open("POST","demo_post.php",true);
xmlhttp.send();

Untuk POST data yang seperti bentuk HTML, tambahkan header HTTP dengan setRequestHeader (). Tentukan data yang ingin Anda kirim di method send (): 

xmlhttp.open("POST","ajax_test.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("nama=Henry&alamat=Jateng");

Penjelasan : 

setRequestHeader(header, value) = menambahkan HTTP Header pada pengiriman permintaan
header = spesifikasi nama header
value  = spesifikasi isi header

URL

Parameter url dari metode open (), adalah sebuah alamat ke file di server:

xmlhttp.open("GET","ajax_test.php",true);

Berbagai jenis file dapat digunakan, seperti .txt dan .xml, atau server file scripting seperti asp dan php (yang dapat melakukan tindakan pada server sebelum mengirim respon kembali).

 ASYNCHRONOUS

AJAX singkatan Asynchronous JavaScript dan XML, dan objek XMLHttpRequest agar berjalan sebagai AJAX, parameter async metode open () harus diatur ke benar: 

xmlhttp.open("GET","ajax_test.php",true);

Mengirim permintaan asynchronous merupakan kemajuan besar dalam pengembangan web. Banyak tugas yang dilakukan pada server yang sangat memakan waktu. Sebelum AJAX, operasi ini bisa menyebabkan aplikasi menggantung atau berhenti.
 
Dengan AJAX, JavaScript tidak harus menunggu respon dari server, tetapi dapat:
  • mengeksekusi script lain sambil menunggu respon dari server
  • berurusan dengan respon ketika respon siap

ASYNC = TRUE

Bila menggunakan async = true, tentukan fungsi yang dieksekusi ketika respon siap dalam onreadystatechange: 

xmlhttp.onreadystatechange=function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200){
    document.getElementById("teks").innerHTML=xmlhttp.responseText;
  }
}
  xmlhttp.open("GET","teks.txt",true);
  xmlhttp.send();

Untuk menggunakan async = false, cukup ubah parameter ketiga di method open().

xmlhttp.open("GET","teks.txt",false);

  ASYNC = FALSE

Saya tidak meyarankan penggunaan async = false, tapi untuk request data yang kecil masih bisa digunakan.
Ingat bahwa JavaScript TIDAK akan mengeksekusi perintah sampai respon server siap. Jika server sibuk atau lambat, aplikasi akan hang atau berhenti.
Catatan: Bila Anda menggunakan async = false, jangan menulis fungsi onreadystatechange - cukup dengan menempatkan script send () pernyataan:

xmlhttp.open("GET","teks.txt",false);
xmlhttp.send();
document.getElementById("teks").innerHTML=xmlhttp.responseText;


Sekian  dulu untuk hari ini, tunggu kelanjutannya besok.
 --------
Note : Hari ini gak ada contohnya yang bisa di download, tapi bisa menggunakan contoh yang kemarin sudah saya sertakan di part1.
sumber : www.w3schools.com