fetch() 总是导致 "type: 'opaque'"。但是我可以在端点上成功使用 Postman

fetch() always results in "type: 'opaque'". But I can use Postman on my endpoint successfully

我在 JavaScript 一定很糟糕,但我已经为此苦苦挣扎了几天,但我没有取得任何进展。

长话短说,我正在尝试使用 UPS 的 REST API。我可以用 Postman 来做,也可以用 PowerShell 来做,没有任何问题。 JavaScript 是一个完全不同的故事,我无处可去。

我已经尝试过 XMLHttpRequest 和 fetch() 并且我已经尝试了很多不同的组合,我无法一一列举。

下面是我的网络应用程序中的 JS 函数(它在更改字段时触发)。 JS 函数调用 Azure 函数(Azure 函数在 Postman 和 PowerShell 中运行。)

function getUpsShipTime() {
    var jsonBody = {
        "DeliveryDate": "2017-06-06",
        "ShippingCode": "GND",
        "ShipFrom": {
            "Address": {
                "StateProvinceCode": "CA",
                "CountryCode": "US",
                "PostalCode": "90210"
            },
        },
        "ShipTo": {
            "Address": {
                "StateProvinceCode": "FL",
                "CountryCode": "US",
                "PostalCode": "32830"
            }
        }
    }

    var uri = "https://MyAzureFunction.azurewebsites.net/api/HttpTriggerPowerShell1?code=MyAuthCode=="

    var req = new Request(uri, {
        method: 'post',
        mode: 'no-cors',
        headers: {
            'Content-type': 'application/json'
        },
        body: JSON.stringify(jsonBody)
    });
    fetch(req)
        .then(function (response) {
            console.log(response);
            return response.blob();
        }).then(function (blob) {
            console.log(blob);
        });
}

当函数运行时,我得到以下信息:

这是我从 Postman 那里得到的:

我做错了什么?

您在 no-cors 模式下请求 URL,这就是返回不透明响应的原因。实际上,这就是您所要求的。

相反,我建议您按照 here 所述为 Azure Function 配置 CORS,并将模式更改为 cors