为了使事情更容易理解,请考虑以下代码:
<script type="text/javascript">
var subscriberId = '12345';
</script>
<script type="text/javascript" src="https://example.com/main.js"></script>
我试图实现的是如何使用 fetch api 创建与上述代码相同的行为。我使用 Google AMP,所以这不会验证。我目前正在尝试做的是创建一个服务工作者,并从那里运行 JavaScript。在一个普通的 html 页面中,上面的代码片段会从远程服务器返回一个响应(我试过并验证了它),并带有一个 json 对象,该对象在 chrome 开发工具的“XHR and Fetch”中可见。问题是由于 cors 政策,我不能使用 POST,而只能使用(?)GET。所以我想出了下面的代码:
function validateResponse(response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response;
}
function readResponse(response) {
return response();
}
function logResult(result) {
console.log(result);
}
function logError(error) {
console.log('Looks like there was a problem: \n', error);
}
function fetchUrl(pathToResource) {
fetch(pathToResource, {
method: "GET",
mode: 'no-cors',
credentials :'include',
headers: new Headers({
'Accept': 'text/html',
'Content-Type': 'application/javascript;charset=UTF-8',
'Cache': 'no-cache',
'subscriberId': '12345'
}),
})
.then(validateResponse)
.then(readResponse)
.then(logResult)
.catch(logError);
}
fetchUrl('https://example.com/main.js');
我在控制台中收到
Looks like there was a problem:
Error
at validateResponse
有人可以对这个问题提供一些见解吗?显然这是一个不透明的响应,我不知道如何处理它。