Как использовать XMLHttpRequest с использованием VBA с данными объекта - PullRequest
0 голосов
/ 15 января 2020

В настоящее время я пытаюсь создать msgbox для пользовательской формы, которую я создаю, которая отвечает данными из приведенного ниже javascript с использованием VBA

$.ajax({
                type: "GET",
                url: app.global.AppPath + 'Dashboard/GetComments',
                async: false,
                data: {
                    id: 1015998
                },
                success: function(result) {}
});

Код VBA:

Private Sub UserForm_Click()
    Dim strUrl As String
        strUrl = "https://charter.osp-cloud.com/ATOM/Dashboard/GetComments"

    Set hReq = CreateObject("MSXML2.XMLHTTP")
        With hReq
            .Open "GET", strUrl, False
            .SetRequestHeader "Content-Type", "text/json"
            .Send "id=1015998"
        End With
    MsgBox hReq.ResponseText
End Sub

Кто-нибудь знает, что я делаю не так? Это потому, что я не отправляю объект .Send "{id: 1015998}"?

ОБНОВЛЕНИЕ: после небольшого исследования я обнаружил, что, возможно, синтаксический анализ json может работать, но я не могу заставить его распознать, что объект существует

Dim JSON As Dictionary
Set JSON = JsonConverter.ParseJson("{""id"": 1015998}")

Ошибка говорит: «Требуется объект»

Полученный ответ ниже

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult GetComments(Int32)' in 'EZTRACKER.Controllers.DashboardController'.

1 Ответ

0 голосов
/ 15 января 2020

Вы используете POST, а не GET при отправке данных в теле запроса:

Также исправьте свой тип контента

Private Sub UserForm_Click()
    Dim strUrl As String, hreq
        strUrl = "https://charter.osp-cloud.com/ATOM/Dashboard/GetComments"

    Set hreq = CreateObject("MSXML2.XMLHTTP")
        With hreq
            .Open "POST", strUrl, False
            .SetRequestHeader "Content-Type", "application/json"
            .Send "{""id"":1015998}"
        End With
    Debug.Print hreq.ResponseText
End Sub

или, если вы хотите использовать GET, данные отправляются в строку запроса :

Private Sub UserForm_Click()
    Dim strUrl As String, hreq
        strUrl = "https://charter.osp-cloud.com/ATOM/Dashboard/GetComments?id=1015998"

    Set hreq = CreateObject("MSXML2.XMLHTTP")
        With hreq
            .Open "GET", strUrl, False
            .SetRequestHeader "Content-Type", "application/json"
            .Send 
        End With
    Debug.Print hreq.ResponseText
End Sub
...