這裏顯示兩個版本的差異處。
下次修改 | 前次修改 | ||
webdesign:head_rush_ajax [2007/02/26 00:15] wenpei 建立 |
webdesign:head_rush_ajax [2007/02/26 01:08] (目前版本) wenpei |
||
---|---|---|---|
行 10: | 行 10: | ||
==== 建立請求物件 ==== | ==== 建立請求物件 ==== | ||
+ | 靜態 JavaScript:程式不在任何 function 中,當瀏覽器載入頁面時即執行 | ||
<code> | <code> | ||
<script language="javascript" type="text/javascript"> | <script language="javascript" type="text/javascript"> | ||
- | + | // 靜態 JavaScript | |
- | var request = null; | + | var request = null; |
- | function createRequest() { | + | // 原本放在 createRequest() 中 |
try { | try { | ||
- | request = new XMLHttpRequest(); // for firefox | + | request = new XMLHttpRequest(); // 非微軟的瀏覽器(Safari、FireFox、Mozilla、Opera...etc) |
} catch (trymicrosoft) { | } catch (trymicrosoft) { | ||
try{ | try{ | ||
- | request = new ActiveXObject("Msxml2.XMLHTTP"); // for IE | + | request = new ActiveXObject("Msxml2.XMLHTTP"); // 大多數 IE |
} catch (othermicrosoft) { | } catch (othermicrosoft) { | ||
try { | try { | ||
- | request = new ActiveXObject("Microsoft.XMLHTTP"); | + | request = new ActiveXObject("Microsoft.XMLHTTP"); // 還是 IE |
} catch (failed) { | } catch (failed) { | ||
request = null; | request = null; | ||
行 32: | 行 32: | ||
if (request == null) | if (request == null) | ||
alert ("Error creating request object!"); | alert ("Error creating request object!"); | ||
- | } | + | |
</code> | </code> | ||
+ | |||
+ | |||
==== 送出請求 ==== | ==== 送出請求 ==== | ||
<code> | <code> | ||
function getBoardsSold() { | function getBoardsSold() { | ||
- | createRequest(); | + | // createRequest(); // 已被靜態執行 |
var url = "getUpdatedBoardSales-ajax.php"; | var url = "getUpdatedBoardSales-ajax.php"; | ||
- | url = url + "?dummy=" + new Date().getTime(); | + | url = url + "?dummy=" + new Date().getTime(); // 解決瀏覽器快取問題 |
createRequest(); | createRequest(); | ||
request.open("GET", url, true); // 初始化連線,將資料以 GET 的方式送到伺服器上給 url 檔案處理,true 表非同步 | request.open("GET", url, true); // 初始化連線,將資料以 GET 的方式送到伺服器上給 url 檔案處理,true 表非同步 | ||
行 48: | 行 50: | ||
</code> | </code> | ||
- | * 四種備妥狀態: | + | 四種備妥狀態: |
- | - 連線初始化 | + | 0. 尚未初始化 |
- | - 正在處理 | + | 1. 連線已經初始化 |
- | - 伺服器即將完成請求 | + | 2. 正在處理 |
- | - 完成 | + | 3. 伺服器即將完成請求,將資料傳給瀏覽器 |
- | * onreadystatechange 會影響所有備妥狀態 | + | 4. 完成,可透過請求物件的 responseText 屬性取得回應資料 |
+ | |||
+ | * 每次備妥狀態一改變,瀏覽器都會去執行 onreadystatechange 指定的回呼函式 | ||
==== HTML 部份 ==== | ==== HTML 部份 ==== | ||
行 86: | 行 90: | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | ==== IE、Opera 瀏覽器的快取問題 ==== | ||
+ | 若 url 一樣時,瀏覽器會快取,再次送出請求(按下 button)時,瀏覽器會直接拿之前快取的資料,不會真正再向伺服器請求一次資料,造成資料無法更新。 | ||
+ | |||
+ | 在 url 放入一些無意義的假參數(如時間),即可每次產生不同的 url。 | ||
+ | |||
+ | url = url + "?dummy=" + new Date().getTime(); |