[Share] Membuat AJAX bisa reload dengan jQuery

Forum diskusi mengenai client-side scripting Javascript dan framework-framework yang mendukungnya

Moderator: irzan2010

[Share] Membuat AJAX bisa reload dengan jQuery

Postby flack » 31 Mar 2011, 21:24

Pengantar
AJAX (Asynchronous JavaScript and XML), adalah suatu teknik pemrograman berbasis web untuk menciptakan aplikasi web interaktif. Tujuannya adalah untuk memindahkan sebagian besar interaksi pada komputer web surfer, melakukan pertukaran data dengan server di belakang layar, sehingga halaman web tidak harus dibaca ulang secara keseluruhan setiap kali seorang pengguna melakukan perubahan. Hal ini akan meningkatkan interaktivitas, kecepatan, dan usability. [Wikipedia, 2011]

Problem AJAX
Karena pada dasarnya tidak melakukan perubahan alamat (URL) ketika menggunakan AJAX, maka AJAX mempunyai kelemahan yaitu meload kembali konten yang sebelumnya terjadi pemanggilan AJAX. Hal ini bisa aja di akali dengan tidak melakukan AJAX pada bagian konten utama, melainkan hanya pada bagian-bagian kecil saja (misalnya, banner). Tetapi untuk kasus yang menerapkan AJAX pada bagian konten utama (contoh: Facebook, Twitter, dll) yang membutuhkan kedinamisan halaman yang sangat tinggi, maka problem ini bisa menjadi fatal karena tampilan kembali ke awal ketika halaman di reload ulang.

Solusi
Sebenarnya permasalahannya terletak pada saat browser melakukan pemanggilan melalui XMLHttpRequest, dimana tidak akan mengubah alamat browser pada halaman yang dipanggil. Hal inilah yang membuat halaman akan meload ulang konten sebelum AJAX dipanggil ketika dilakukan REFRESH. Facebook telah lama memecahkan permasalahan ini dengan melakukan pencegahan klik link anchor (<a>), dan menaruhnya dalam hash setelah alamat halaman web. Dan di tutorial ini akan dijelaskan penggunaan sistem AJAX-Reload yang digunakan oleh Facebook dengan memanfaatkan framework jQuery.

Source Code
Kita akan membuat beberapa halaman web + Ajax dan menerapkan sistem yang pakai Facebook untuk melakukan Ajax-Reload ini.

File : index.html
Code: Select all
<html>
  <head>
    <title>Penerapan AJAX-Reload</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <script language="javascript" src="jquery.history.js"></script>
    <script>
        $(document).ready(function() {
           
            $.history.init(pageLoad);
           
            bindAnchor('a');
        });
       
        function bindAnchor(selector)
        {
            $(selector).bind('click', function(e) {

                e.preventDefault();

                var hash = this.href.replace(window.location.protocol + '//' + window.location.hostname, '');

            $.history.load('!' + hash);
            
            getPage();

                return false;
            });
        }
       
        function pageLoad(hash) {
            if (hash) getPage();
        }
       
        function getPage()
        {
            if (window.location.hash != '') {
               
                var hash = window.location.hash;
               
                // Get Content
                $.ajax({
                    url: window.location.protocol + '//' + window.location.hostname + hash.substring(hash.search('!') + 1),
                    success: function(data) {
                  $('#content').hide();
                        $('#content').html(data);
                  
                        bindAnchor($('#content').find('a'));
                  $('#content').fadeIn('slow');
                    }
                });   
            }
        }
    </script>
  </head>
   <body>
      <h2>Penerapan AJAX-Reload</h2>
      <p>Content dengan ajax</p>
      <ul>
         <li><a href="content-1.html">Content 1</a></li>
         <li><a href="content-2.html">Content 2</a></li>
         <li><a href="content-3.html">Content 3</a></li>
      </ul>
      <div id="content" style="border: 1px solid #000; padding: 5px">
       
      </div>
   </body>
</html>


File : jquery.history.js
Code: Select all
(function($){function History(){this._curHash='';this._callback=function(hash){}};$.extend(History.prototype,{init:function(callback){this._callback=callback;this._curHash=location.hash;if($.browser.msie){if(this._curHash==''){this._curHash='#'}$("body").prepend('<iframe id="jQuery_history" style="display: none;"></iframe>');var iframe=$("#jQuery_history")[0].contentWindow.document;iframe.open();iframe.close();iframe.location.hash=this._curHash}else if($.browser.safari){this._historyBackStack=[];this._historyBackStack.length=history.length;this._historyForwardStack=[];this._isFirst=true;this._dontCheck=false}this._callback(this._curHash.replace(/^#/,''));setInterval(this._check,100)},add:function(hash){this._historyBackStack.push(hash);this._historyForwardStack.length=0;this._isFirst=true},_check:function(){if($.browser.msie){var ihistory=$("#jQuery_history")[0];var iframe=ihistory.contentDocument||ihistory.contentWindow.document;var current_hash=iframe.location.hash;if(current_hash!=$.history._curHash){location.hash=current_hash;$.history._curHash=current_hash;$.history._callback(current_hash.replace(/^#/,''))}}else if($.browser.safari){if(!$.history._dontCheck){var historyDelta=history.length-$.history._historyBackStack.length;if(historyDelta){$.history._isFirst=false;if(historyDelta<0){for(var i=0;i<Math.abs(historyDelta);i++)$.history._historyForwardStack.unshift($.history._historyBackStack.pop())}else{for(var i=0;i<historyDelta;i++)$.history._historyBackStack.push($.history._historyForwardStack.shift())}var cachedHash=$.history._historyBackStack[$.history._historyBackStack.length-1];if(cachedHash!=undefined){$.history._curHash=location.hash;$.history._callback(cachedHash)}}else if($.history._historyBackStack[$.history._historyBackStack.length-1]==undefined&&!$.history._isFirst){if(document.URL.indexOf('#')>=0){$.history._callback(document.URL.split('#')[1])}else{$.history._callback('')}$.history._isFirst=true}}}else{var current_hash=location.hash;if(current_hash!=$.history._curHash){$.history._curHash=current_hash;$.history._callback(current_hash.replace(/^#/,''))}}},load:function(hash){var newhash;if($.browser.safari){newhash=hash}else{newhash='#'+hash;location.hash=newhash}this._curHash=newhash;if($.browser.msie){var ihistory=$("#jQuery_history")[0];var iframe=ihistory.contentWindow.document;iframe.open();iframe.close();iframe.location.hash=newhash;this._callback(hash)}else if($.browser.safari){this._dontCheck=true;this.add(hash);var fn=function(){$.history._dontCheck=false};window.setTimeout(fn,200);this._callback(hash);location.hash=newhash}else{this._callback(hash)}}});$(document).ready(function(){$.history=new History()})})(jQuery);


File : content1.html
Code: Select all
<ul>
   <li><strong>CONTENT 1</strong></li>
   <li><a href="content-1.html">Content 1</a></li>
   <li><a href="content-2.html">Content 2</a></li>
   <li><a href="content-3.html">Content 3</a></li>
</ul>


File : content2.html
Code: Select all
<ul>
   <li><strong>CONTENT 2</strong></li>
   <li><a href="content-1.html">Content 1</a></li>
   <li><a href="content-2.html">Content 2</a></li>
   <li><a href="content-3.html">Content 3</a></li>
</ul>


File : content3. html
Code: Select all
<ul>
   <li><strong>CONTENT 3</strong></li>
   <li><a href="content-1.html">Content 1</a></li>
   <li><a href="content-2.html">Content 2</a></li>
   <li><a href="content-3.html">Content 3</a></li>
</ul>


Selamat mencoba... :D

Post flack telah mendapat kopi dari:
TUarik
User avatar
flack
Administrator
Administrator
 
Posts: 1257
Joined: 08 Mar 2010, 07:59
Location: Sidoarjo
Memberi kopi: 49 cangkir
Mendapat kopi: 73 cangkir

Re: [Share] Membuat AJAX bisa reload dengan jQuery

Postby trail » 31 Mar 2011, 21:48

:-bd :-bd :-bd
mantap, udah merajai dunia WEB... ^:)^ ^:)^

maju trs om mimin... :D :D :ar! :ar! :ar! \m/ \m/
@_@....@_@....@_@
User avatar
trail
Database Moderator
Database Moderator
 
Posts: 1348
Joined: 11 Mar 2010, 14:27
Location: Surabaya
Memberi kopi: 47 cangkir
Mendapat kopi: 103 cangkir

Re: [Share] Membuat AJAX bisa reload dengan jQuery

Postby TUarik » 02 Apr 2011, 14:15

eew... mantep mantep...
saya jga sering kena masalah seperti itu... nice info oom...

oh ya..
dimana web yang bagus buat memplajari framework jquery??
Selama bumi ini masih berotasi,,,, saya akan tetap belajar pemrograman
User avatar
TUarik
Prajurit Satu
Prajurit Satu
 
Posts: 185
Joined: 14 Mar 2010, 19:04
Location: di depan laptop ACER 4540 yang sederhana....
Memberi kopi: 14 cangkir
Mendapat kopi: 6 cangkir

Re: [Share] Membuat AJAX bisa reload dengan jQuery

Postby trail » 03 Apr 2011, 09:08

yang bagus d situsnya JQuery sendiri om...
sama baca2 buku saja
@_@....@_@....@_@
User avatar
trail
Database Moderator
Database Moderator
 
Posts: 1348
Joined: 11 Mar 2010, 14:27
Location: Surabaya
Memberi kopi: 47 cangkir
Mendapat kopi: 103 cangkir

Re: [Share] Membuat AJAX bisa reload dengan jQuery

Postby flack » 04 Apr 2011, 04:24

TUarik wrote:eew... mantep mantep...
saya jga sering kena masalah seperti itu... nice info oom...

oh ya..
dimana web yang bagus buat memplajari framework jquery??


di situsnya sendiri udah lengkap om, jd tinggal di coba-coba sendiri aja dirumah... >:D< >:D<
Jangan malu mengklik tombol kopi pada member yang telah membantu atau memberikan pengetahuannya kepada Anda
Dan ingat selalu Peraturan Memposting !
User avatar
flack
Administrator
Administrator
 
Posts: 1257
Joined: 08 Mar 2010, 07:59
Location: Sidoarjo
Memberi kopi: 49 cangkir
Mendapat kopi: 73 cangkir

Re: [Share] Membuat AJAX bisa reload dengan jQuery

Postby TUarik » 04 Apr 2011, 15:43

saya dah liat kemarin di situsnya... saya baru tau ada situs officialnya ... wkwkwk...
mantep... nambah ilmu...
Selama bumi ini masih berotasi,,,, saya akan tetap belajar pemrograman
User avatar
TUarik
Prajurit Satu
Prajurit Satu
 
Posts: 185
Joined: 14 Mar 2010, 19:04
Location: di depan laptop ACER 4540 yang sederhana....
Memberi kopi: 14 cangkir
Mendapat kopi: 6 cangkir

Re: [Share] Membuat AJAX bisa reload dengan jQuery

Postby flack » 04 Apr 2011, 16:40

harus donk, jangan sampai ilmunya ngga nambah.... :))
Jangan malu mengklik tombol kopi pada member yang telah membantu atau memberikan pengetahuannya kepada Anda
Dan ingat selalu Peraturan Memposting !
User avatar
flack
Administrator
Administrator
 
Posts: 1257
Joined: 08 Mar 2010, 07:59
Location: Sidoarjo
Memberi kopi: 49 cangkir
Mendapat kopi: 73 cangkir

Re: [Share] Membuat AJAX bisa reload dengan jQuery

Postby ozby » 08 Apr 2011, 09:20

wah ilmu yang ane cari csri nih. thx banget oom. :D
oh ya, ane mau tanya. tu kan link nya di hash, nah isi #!/alamat.com/halaman
btw, gmn cara nya biar alamat nya cuma #!/halaman aja. ga isi alamat website nya.
oh ya kalo bisa biar halaman nya aja tanpa #! nya.
hehe thanks oom. tolong add ym ane ya. Mohon bantuan nya alfredcrozby@yahoo.co.uk ^:)^
Kalo matahari udah ga muncul baru aku selesai koding X(
User avatar
ozby
Prajurit Dua
Prajurit Dua
 
Posts: 34
Joined: 07 Apr 2011, 12:05
Location: Di Hatimu
Memberi kopi: 0 cangkir
Mendapat kopi: 6 cangkir

Re: [Share] Membuat AJAX bisa reload dengan jQuery

Postby flack » 08 Apr 2011, 09:56

@ozby :
Postingkan pertanyaannya di forum Web Development aja oom... :D
Jangan malu mengklik tombol kopi pada member yang telah membantu atau memberikan pengetahuannya kepada Anda
Dan ingat selalu Peraturan Memposting !
User avatar
flack
Administrator
Administrator
 
Posts: 1257
Joined: 08 Mar 2010, 07:59
Location: Sidoarjo
Memberi kopi: 49 cangkir
Mendapat kopi: 73 cangkir

Re: [Share] Membuat AJAX bisa reload dengan jQuery

Postby ozby » 08 Apr 2011, 12:55

ni page bukannya web development ya oom :(
Kalo matahari udah ga muncul baru aku selesai koding X(
User avatar
ozby
Prajurit Dua
Prajurit Dua
 
Posts: 34
Joined: 07 Apr 2011, 12:05
Location: Di Hatimu
Memberi kopi: 0 cangkir
Mendapat kopi: 6 cangkir

Next

Return to Javascript and Framework

Who is online

Users browsing this forum: No registered users and 1 guest