曾幾何時,我為了推廣 VBScript 專門寫這部分,現在也快走到盡頭了,自從 IE11 開始不直接支援 VBScript 後,不得不把新開發的東西改用 Javascript ,記得 Windows Phone 7.0 剛開始還支援 VBScript 的,沒想到升級後,就再也不支援了,好在當時曾經拍張照留作紀念過。
我在舊網頁用 AJAx 時,會把 onreadystatechange 持續更新狀態列。
IE7 以後有個功能,當 IE 持續經過某個標記點後,還在持續原先的邏輯,視為無窮迴圈,會跳出警告對話框,一般情形影響不大,但對於自動展示的網頁,因為沒有人去關閉這個對話框,就很麻煩。
網站半夜會利用空檔進行各種排程,包含資料庫備份、掃毒、陰影備份、資料自動品管。
結果忙碌中的 Server 碰上 Client 端的 AJAX 需求,沒空回應,跑著跑著,就會跳出警告對話框。
經查詢 Support 後:
http://support.microsoft.com/kb/175500/zh-tw
http://support.microsoft.com/kb/813827/zh-tw
這兩個都是加長延時,實際上沒啥用,實際上可能跑到呆掉了。所以我偏向走 Timeout 。無安全警告的 XMLHTTP 沒有 Timeout 功能,因此必須使用網頁本身的 timeout 。
Function AjaxWaitTimeout() window.clearTimeout timerAjaxTimeout htmHttpRequest.abort ' 略 boolAJAXRun = False End Function Function AJAXGetUrlString(Byval strPath, Byval sCallBackFunName) strDataUrl = StrAjaxUrl & "?FullName=" & UrlEncode(strPath) Set htmHttpRequest = CreateXmlHttpRequestObject() htmHttpRequest.onreadystatechange = GetRef(sCallBackFunName) With htmHttpRequest ' 略 .open "GET", strDataUrl, True .send "" window.clearTimeout timerAjaxTimeout timerAjaxTimeout = window.setTimeout("AjaxWaitTimeout", msAjaxTimeout) boolAJAXRun = True End With End Function
我習慣在 Web Server 放個 ajax.aspx 專門給網頁調用資料,這樣可以讓我跨網站叫資料。
所以在我的主呼叫端裡面加個 window.setTimeout ,等到事件被觸發後,終止原先的 AJAX 執行,就可以實作出自己的 AJAX Timeout 了。
VBScript ,不知道還有多少次機會可以再寫到你…