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
。
我在 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
。