Поскольку это VBA, я бы использовал COM для вызова xmlhttprequest
, но использовал бы его синхронно, чтобы не расстраивать однопоточную среду выполнения VBA. Пример класса, который иллюстрирует запрос post
и get
в этом следующим образом:
'BEGIN CLASS syncWebRequest
Private Const REQUEST_COMPLETE = 4
Private m_xmlhttp As Object
Private m_response As String
Private Sub Class_Initialize()
Set m_xmlhttp = CreateObject("Microsoft.XMLHTTP")
End Sub
Private Sub Class_Terminate()
Set m_xmlhttp = Nothing
End Sub
Property Get Response() As String
Response = m_response
End Property
Property Get Status() As Long
Status = m_xmlhttp.Status
End Property
Public Sub AjaxPost(Url As String, Optional postData As String = "")
m_xmlhttp.Open "POST", Url, False
m_xmlhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
m_xmlhttp.setRequestHeader "Content-length", Len(postData)
m_xmlhttp.setRequestHeader "Connection", "close"
m_xmlhttp.send (postData)
If m_xmlhttp.readyState = REQUEST_COMPLETE Then
m_response = m_xmlhttp.responseText
End If
End Sub
Public Sub AjaxGet(Url As String)
m_xmlhttp.Open "GET", Url, False
m_xmlhttp.setRequestHeader "Connection", "close"
m_xmlhttp.send
If m_xmlhttp.readyState = REQUEST_COMPLETE Then
m_response = m_xmlhttp.responseText
End If
End Sub
'END CLASS syncWebRequest
Так что теперь вы можете позвонить по вышеуказанному, чтобы вернуть вам ответ сервера:
Dim request As New syncWebRequest
request.ajaxGet "http://localhost/ClientDB/AllClients?format=json"
Dim json as string
json = request.Response
Проблема здесь в том, что мы хотим иметь возможность считывать данные, возвращаемые с сервера, в большей степени, чем манипулирование строкой JSON напрямую. Что мне помогло, так это использование VBA-JSON (экспорт кода Google здесь ) COM-типа Collection
для обработки массивов JSON и Dictionary
для обработки членов и их объявлений с Метод фабрики парсеров Parse
, который существенно упрощает создание этих коллекций словарей.
Итак, теперь мы можем проанализировать JSON:
[{"Name":"test name","Surname":"test surname","Address":{"Street":"test street","Suburb":"test suburb","City":"test city"}}]
примерно так:
Set clients = parser.parse(request.Response)
For Each client In clients
name = client("Name")
surname = client("Surname")
street = client("Address")("Street")
suburb = client("Address")("Suburb")
city = client("Address")("City")
Next
Это хорошо, но как насчет того, чтобы иметь возможность редактировать и публиковать данные? Также есть метод toString
для создания строки JSON из приведенных выше данных JSON [Коллекция / Словарь], при условии, что сервер принимает JSON обратно.