[VBScript] 讓 AJAX Timeout 吧


曾幾何時,我為了推廣 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 ,不知道還有多少次機會可以再寫到你…

Categories: 工作點滴, 技術分享 | 發表留言

文章分頁導航

發表留言

在 WordPress.com 建立免費網站或網誌.