我使用以下代码,从API获取数据并将数据添加到表中。我想向用户显示API Request Made的进度。因此,使用If来使用readyState Property (IXMLHTTPRequest)
问题 -
调用此函数时,我只得到一个带有4的msgbox。 我错过了什么?
Option Compare Database
Dim ApiUrl As String
Dim reader As New XMLHTTP60
Dim coll As Collection
Dim Json As New clsJSONParser
Public Sub ApiInitalisation()
ApiUrl = "http://private-anon-73376961e-countingappapi.apiary-mock.com/"
End Sub
Public Sub GetPerson()
On Error GoTo cmdLogIn_Click_Err
'For API
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim contact As Variant
Api.ApiInitalisation
ApiUrl = ApiUrl & "users/5428a72c86abcdee98b7e359"
reader.Open "GET", ApiUrl, False
'reader.setRequestHeader "Accept", "application/json"
reader.send
'Temporay variable to store the response
Dim egTran As String
相关代码开始
If reader.ReadyState = 0 Then
MsgBox (0)
End If
If reader.ReadyState = 1 Then
MsgBox (1)
End If
If reader.ReadyState = 2 Then
MsgBox (2)
End If
If reader.ReadyState = 3 Then
MsgBox (3)
End If
If reader.ReadyState = 4 Then
MsgBox (4)
End If
'-------------
' Why is this code required?
' Not yet found answer
'Do Until reader.ReadyState = 4
' DoEvents
'Loop
'-------------------
相关代码结束
' Add data to Table
If reader.Status = 200 Then
Set db = CurrentDb
Set rs = db.OpenRecordset("tblPerson", dbOpenDynaset, dbSeeChanges)
egTran = "[" & reader.responseText & "]"
Set coll = Json.parse(egTran)
For Each contact In coll
rs.AddNew
rs!FName = contact.Item("name")
rs!Mobile = contact.Item("phoneNumber")
rs!UserID = contact.Item("deviceId")
rs!SID = contact.Item("_id")
rs.Update
Next
Else
MsgBox "Unable to import data."
End If
End Sub
0(UNINITIALIZED)=
该对象已创建,但尚未初始化(尚未调用open方法)。
(1)LOADING =
已创建对象,但尚未调用send方法。
(2)LOADED =
已调用send方法,但状态和标头尚未可用。
(3)INTERACTIVE =
已收到一些数据。在此状态下调用responseBody和responseText属性以获取部分结果将返回错误,因为状态和响应标头不完全可用。
(4)COMPLETED =
已收到所有数据,并且responseBody和responseText属性中提供了完整的数据。
答案 0 :(得分:0)
除非你遗漏了一些代码或者我误解了,否则你已经在使用reader.send 之前来检查ReadyState。它总是会以完成状态返回,除非遇到致命错误(即便如此,它可能会以完成状态返回)。