【发布时间】:2019-03-16 19:46:20
【问题描述】:
我正在尝试从 API 检索数据,但即使我在 GET 请求之前将其设置为空,我的变量也不会更新。
只有当我关闭 Excel 并重新打开它时,变量的数据才会更新。
有什么解释吗?我已经挠头这么久了。
这里是代码
Sub getJsonResult()
Dim objRequestt As Object
Dim strUrl As String
Dim blnAsync As Boolean
Dim strUrlXBTUSD As String
Dim strResponse As String
Dim jsonText As String
Dim jsonObject As Object, item As Object
Dim i As Integer
'setting up the variable to 0 or nothing
strUrlXBTUSD = ""
strResponsee = ""
jsonText = ""
i = 0
blnAsync = False
Set item = Nothing
Set jsonObject = Nothing
Set objRequestt = Nothing
Set objRequestt = CreateObject("MSXML2.XMLHTTP")
strUrlXBTUSD = "https://www.bitmex.com/api/v1/orderBook/L2?symbol=XBTUSD&depth=3"
blnAsync = True
'Starting the GET request
ThisWorkbook.Activate
With objRequestt
.Open "GET", strUrlXBTUSD, blnAsync
.SetRequestHeader "Content-Type", "application/json"
.send
strResponse = .responseText 'here the response is always the same except if i Close Excel
Debug.Print strResponsee
End With
End Sub
即使经过几次 F5 刷新,最后“strResponse”也始终相同。我可以看到数据在网络浏览器上不再准确。我希望 VBA 程序在不关闭 Excel 的情况下获取准确的数据并刷新。
怎么做?
【问题讨论】:
-
GET 请求是否被缓存了,是偶然的吗?
-
另外,可能应该强制同步模式..?没有附加回调处理程序,所以我很惊讶甚至第一次“成功”获取。
-
你称之为异步。 varAsync [可选] 布尔值。调用是否异步的指示符。默认值为 True(调用立即返回)。如果设置为 True,则附加一个 onreadystatechange 属性回调,以便您知道发送调用何时完成。。您的大多数代码行都是完全不必要的,并且会减慢您的代码速度。变量默认为
nothing/false/0/"" -
你好@user2864740,我不确定它是否被缓存。如何检查?如果可以,我该怎么办?
-
你好@Noodles!你能解释一下如何附加一个onreadystatechange吗?我从来没有用过这样的东西!
标签: excel vba api web-scraping