在網頁上常常會看到,點擊某些東西之後就會即時的顯示一些資料
例如旅行社網頁,選擇價錢可以即時出現該價位的飯店
其實是透過AJAX(Asynchronous JavaScript and XML)處理的
jQuery Ajax
HTML:
<div id="con"> </div>
jQuery:
function fetch_data(n){ $.ajax({ type : "GET", url : "fetch_data.php?act="+n, data : "", success : function($msg){ $('#con').html($msg); } }); //注意!因為ajax是同步的,因此當執行ajax後,瀏覽器會馬上接著執行接下來的程式碼 console.log(123); }
fetch_data:
echo $_GET['act'];
jQuery會將fetch_data echo出來的東西全部塞到#con這個區塊內,不過#con裡原先若有其他內容將會被覆蓋過去
且原先就寫在網頁中的javascript判斷不到利用AJAX顯示出來的DOM元件
若要使用則需將javascript放在fetch_data一同輸出。
sync ajax
$.ajax({ type : "GET", url : "fetch_data.php?act="+n, //加入async參數 async : false, data : "", success : function($msg){ $('#con').html($msg); } });
jQuery在AJAX部份也越來越多新用法,比如說:
//以AJAX post為例(執行後test.php就會抓的到$_POST['name']的資料囉) $.post("test.php", { "name": "姓名", "bir": "19891028" }, function(data) { alert(data); });
AJAX觸發事件流程
ajaxStart > ajaxSend > ajaxSuccess 或 ajaxError > ajaxComplete > ajaxStop
所以可以針對以上觸發事件做一些loading的特效
$(document).ajaxStart(function(){ alert("運行中"); }); $(document).ajaxComplete(function(){ alert("結束"); });
AJAX因為安全性問題所以無法跨網域抓資料,如果有需求的需要再另外處理