在網頁上常常會看到,點擊某些東西之後就會即時的顯示一些資料

例如旅行社網頁,選擇價錢可以即時出現該價位的飯店

其實是透過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因為安全性問題所以無法跨網域抓資料,如果有需求的需要再另外處理

Categories: jQuery