用VB實現XMLHttp Pool

來源:互聯網
上載者:User

昨天看了鳥食軒的文章構建一個pool來管理無重新整理頁面的xmlhttp對象 ,自己用VB6實現了一下,結果出現了一點小問題,總結一下。

代碼:

Form:Form1

Option Explicit

Private Pools As HttpPool

Private Sub Command1_Click()
    Dim o As MSXML2.XMLHTTP
    Set o = Pools.GetObject()
    Dim Handler  As MyReadyStateHandler
    Set Handler = New MyReadyStateHandler
    Handler.ini o
    o.OnReadyStateChange = Handler
    o.open "GET", "Http://localhost/js/message.htm", True
    o.send
    Set Handler = Nothing
End Sub

Private Sub Form_Load()
    Set Pools = New HttpPool
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set Pools = Nothing
End Sub

Class:HttpPool

Option Explicit

Dim Pool As Collection

'沒有考慮池容量
Public Function GetObject() As MSXML2.XMLHTTP
    Dim i As Integer
    Dim o As MSXML2.XMLHTTP
    For i = 1 To Pool.Count
        Set o = Pool(i)
        If o.readyState = 4 Or o.readyState = 0 Then
        o.abort
        GoTo ExitLabel
        End If
    Next
    Set o = New MSXML2.XMLHTTP
    Pool.Add o
ExitLabel:
    Set GetObject = o
    Debug.Print Pool.Count
End Function

Private Sub Class_Initialize()
    Set Pool = New Collection
End Sub

Private Sub Class_Terminate()
    Dim i As Integer
    For i = 1 To Pool.Count
        Pool(i).abort
    Next
    Set Pool = Nothing
End Sub

Option Explicit

Dim p As XMLHTTP

Sub OnReadyStateChange()
    If p.readyState = 4 Then
        Debug.Print p.responseText
    End If
End Sub

Class:MyReadyStateHandler

Public Sub ini(o As XMLHTTP)
    Set p = o
End Sub

在原先的JavaScript的代碼中沒有黃色代碼對應的語句,因此在VB6的調試過程中一點一個XMlHttp對象被用過後readyState狀態一直是4,所以就不在觸發OnReadyStateChange事件了,因此responseText只能顯示一次,以後就無法工作了,最後加上o.abort一切搞定。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.