javascript - 在 Fetch 响应中使用 Location 标头
问题描述
我正在使用获取请求,并且我想在响应中检测位置标头,以便我可以根据是否存在位置标头做出不同的反应,如下所示:
fetch(request)
.then(response => {
for(var keyValPair of response.headers.entries())
{
alert(keyValPair[0]);
if(keyValPair[0] === 'Location')
{
alert('TRYING TO RELOCATE');
window.location.replace(keyValPair[1]);
return;
}
}
if(response.ok)
{
return response.text();
}
else
{
document.getElementById(targetBlock).innerHTML = 'ERROR! ERROR! There has been an ERROR!'
}
})
.then(removeBlock('alertMessageBlock'))
.then(function(text){document.getElementById(targetBlock).innerHTML = text;})
.catch(error => console.log('There was an error:', error))
}
它获取的php文件如下:
<?php
require __DIR__ . '/../../private_templates/Template/varsConstants.php';
require_once __DIR__ . '/../../private_templates/Modules/functions.php';
require __DIR__ . '/../../private_templates/Modules/dbConnection.php';
require_once __DIR__ . '/../../private_templates/Modules/DatabaseTable.php';
require_once __DIR__ . '/../../private_templates/Modules/Authentication.php';
require_once __DIR__ . '/../../private_templates/Modules/memberClass.php';
if (!isset($alertMessage))
{
$alertMessage = [];
}
$membersTable = new DatabaseTable($dbc, 'member', 'memberID');
$authentication = new Authentication($dbc, $membersTable, 'email', 'pass');
if ($authentication->isLoggedIn())
{
?>
<form data-targetBlock="adminMembers" class="fetchForm" action="<?=ADDRESS ?>/MAINhubs/privateHub.php" method="post">
<fieldset>
<legend>Search for Members By:</legend>
<label for="searchType">Choose Search Parameter:</label>
<select name = "searchType">
<option value = "none" selected>Choose parameter to search by</option>
<option value = "registrationDate">Registration Date</option>
<option value = "firstName">First Name</option>
<option value = "lastName">Last Name</option>
<option value = "email">Email</option>
<option value = "company">Company</option>
<option value = "city">City</option>
<option value = "region">Region</option>
<option value = "country">Country</option>
</select>
<button type="submit" name="formTarget" value="adminMembersSearch">Load Members Search Form</button>
</fieldset>
</form>
<div id="adminMembers">
</div>
<?php
}
else
{
header('Access-Control-Expose-Headers: Location');
header('Location: ' . ADDRESS);
}
require_once __DIR__ . '/../../private_templates/Sections/alertMessageBlock.php';
?>
提取工作正常,位置标头工作正常,但我拦截标头在我希望整个窗口重定向到该位置而不是将其插入到 targetBlock 的地方不起作用。我觉得我需要公开位置标题,但我不知道该怎么做......有什么帮助吗?
解决方案
使用 Location 标头不起作用,因此我创建了一个自定义标头:
else
{
header('goto: ' . ADDRESS);
}
然后我能够看到获取响应中的标头并在此处按预期使用它。
fetch(request)
.then(response => {
for(var keyVal of response.headers.entries())
{
if(keyVal[0] === 'goto')
{
window.location.href = keyVal[1];
return;
}
}
if(response.ok)
{
return response.text();
}
else
{
document.getElementById(targetBlock).innerHTML = 'ERROR! ERROR! There has been an ERROR!'
}
})
.then(removeBlock('alertMessageBlock'))
.then(function(text){document.getElementById(targetBlock).innerHTML = text;})
.catch(error => console.log('There was an error:', error))
}
推荐阅读
- geometry - 如何消除两个圆的碰撞?
- python - AttributeError:'NoneType'对象没有属性'exec_command',将代码行转换为函数时,在python中
- variables - 如何在变量中添加换行符?
- python - Python BeautifulSoup include blank lines
- vba - 如何从房产税网站上抓取数据
- django - django-autocomplete-light 的建议显示在下拉列表之外
- python - 在 Macbook 上使用 plot_tree 可视化 XGB
- html - 如何用边框半径将文本环绕在形状周围?
- excel - 仅在第一组括号内提取值 | Excel
- database - 如何从 vb.net 的数据库中填充树视图?