fetch()始终会导致"键入:' opaque'"。但我可以成功地在我的终端上使用Postman

时间:2017-05-18 21:19:23

标签: javascript rest azure azure-functions

我一定非常害怕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);
        });
}

当函数运行时,我得到以下内容:

result of fetch() against my REST endpoint

这是我从邮递员那里得到的:

REST call result from Postman

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您以no-cors模式请求URL,这就是返回opaque响应的原因。实际上,这就是你所要求的。

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