要想應用Ajax,首先必須搞清楚Ajax的執行原理:一個Ajax互動從一個稱為XMLHttpRequest的JavaScript對象開始。如同名字所暗示的,它允許一個用戶端指令碼來執行HTTP請求,並且將會解析一個XML格式的伺服器響應。Ajax處理過程中的第一步是建立一個XMLHttpRequest執行個體。使用HTTP方法(GET或POST)來處理請求,並將目標URL設定到XMLHttpRequest對象上。
當你發送HTTP請求,你不希望瀏覽器掛起並等待伺服器的響應,取而代之的是,你希望通過頁面繼續響應使用者的介面互動,並在伺服器響應真正到達後處理它們。要完成它,你可以向XMLHttpRequest註冊一個回呼函數,並非同步地派發XMLHttpRequest請求。控制權馬上就被返回到瀏覽器,當伺服器響應到達時,回呼函數將會被調用。
看這些你可能看不懂,太抽象了!下面我給個Ajax的實際例子:
1. 初始化Ajax
Ajax實際上就是調用了XMLHttpRequest對象,那麼首先我們的就必須調用這個對象,我們構建一個初始化Ajax的函數:
function InitAjax()
{
var ajax=false;
try
{
ajax = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (E)
{
ajax = false;
}
}
if (!ajax && typeof XMLHttpRequest!='undefined')
{
ajax = new XMLHttpRequest();
}
return ajax;
}
我們在執行任何Ajax操作之前,都必須先調用InitAjax()函數來執行個體化一個Ajax對象。這個函數可以作為一個通用函數來用,當然這個函數也有其他的寫法,此處寫的比較簡單,因為大多數瀏覽器都支援Ajax。
2. 使用Get方式
現在我們第一步來執行一個Get請求,加入我們需要擷取 /show.php?id=1的資料,那麼我們應該怎麼做呢?
假設有一個連結:<a href="/show.php?id=1">新聞1</a>,我點該連結的時候,不想任何重新整理就能夠看到連結的內容,那麼我們該怎麼做呢?
//將連結改為:
<a href="#" onClick="getNews(1)">新聞1</a>
//並且設定一個接收新聞的層,並且設定為不顯示:
<div id="show_news"></div>
同時構造相應的JavaScript函數:
function getNews(newsID)
{
//如果沒有把參數newsID傳進來
if (typeof(newsID) == 'undefined')
{
return false;
}
//需要進行Ajax的URL地址
var url = "/show.php?id="+ newsID;
//擷取新聞顯示層的位置
var show = document.getElementById("show_news");
//執行個體化Ajax對象
var ajax = InitAjax();
//使用Get方式進行請求
ajax.open("GET", url, true);
//擷取執行狀態
ajax.onreadystatechange = function() {
//如果執行是狀態正常,那麼就把返回的內容賦值給上面指定的層
if (ajax.readyState == 4 && ajax.status == 200)
{
show.innerHTML = ajax.responseText;
}
}
//發送空
ajax.send(null);
}
當使用者點擊“新聞1”這個連結的時候,在下面對應的層將顯示擷取的內容,而且頁面沒有任何重新整理。當然,上面省略了show.php這個檔案,我們只是假設show.php檔案存在,並且能夠正常工作的從資料庫中把id為1的新聞提取出來。這種方式適應於頁面中任何元素,包括表單等等,其實在應用中,對錶單的操作是比較多的,針對錶單,更多使用的是POST方式。
下面是我做的一個簡單的例子:
1、test.php檔案代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>ajax測試頁</title>
<style type="text/css">
<!--
body {
margin-left: 10%;
margin-right: 10%;
}
#Layer1 {
position:absolute;
width:256px;
height:326px;
z-index:1;
left: 380px;
top: 16px;
}
-->
</style>
<script type="text/javascript">
function InitAjax()
{
var ajax=false;
try
{
ajax = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (E)
{
ajax = false;
}
}
if (!ajax && typeof XMLHttpRequest!='undefined')
{
ajax = new XMLHttpRequest();
}
return ajax;
}
function getimages(id)
{
var url = "images.php?picture="+id;
var show = document.getElementById("Layer1");
var ajax = InitAjax();
ajax.open("GET", url, true);
ajax.onreadystatechange = function()
{
if (ajax.readyState == 4 && ajax.status == 200)
{
show.innerHTML = ajax.responseText;
}
}
ajax.send(null);
}
</script>
</head>
<body>
<table width="226" height="433" border="1" align="left" cellpadding="3" rules="none" frame="rhs">
<tr>
<th height="69" scope="col" align="right"><input type="button" name="" value="圖片一" onclick="getimages(1)"></th>
</tr>
<tr>
<th height="69" scope="col" align="right"><input type="button" name="" value="圖片二" onclick="getimages(2)"></th>
</tr>
<tr>
<th height="69" scope="col" align="right"><input type="button" name="" value="圖片三" onclick="getimages(3)"></th>
</tr>
<tr>
<th height="214" scope="col"></th>
</tr>
</table>
<div id="Layer1"></div>
</body>
</html>
2、images.php檔案代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>圖片</title>
</head>
<body>
<?php
$id=$_GET["picture"];
if($id==1)
{
printf("<img src='images/1.jpg' width='320' height='440' />");
}
if($id==2)
{
printf("<img src='images/2.jpg' width='320' height='440' />");
}
if($id==3)
{
printf("<img src='images/3.jpg' width='320' height='440' />");
}
?>
</body>
</html>
只要在images檔案夾下有這三個圖片就可以了!