You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

POST提交位置选择菜单后返回页面触发ERR_CACHE_MISS错误的技术求助

解决POST提交后返回页面出现ERR_CACHE_MISS的问题

首先咱们得搞清楚这个错误的根源:当你通过POST提交表单到mix_menu.php后,浏览器会记录这个POST请求的会话。当你从mix_menu.php返回原页面时,浏览器会尝试重新发送之前的POST请求来加载原页面,但由于缓存中没有保存该POST请求的响应,就会抛出ERR_CACHE_MISS错误。

下面给你几个靠谱的解决方案,按推荐程度排序:

1. 使用PRG模式(Post/Redirect/Get)—— 最佳实践

这是Web开发中解决POST重提交问题的标准方案,核心思路是:处理完POST请求后,服务器发起一个重定向(GET请求),让用户的浏览器跳转到一个新的GET页面,这样后续返回操作只会触发GET请求,不会再涉及POST数据。

修改mix_menu.php的代码如下:

<?php
session_start(); // 启动会话,用来存储位置信息(方便后续使用)

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 获取POST的位置信息
    $storename = $_POST['location'];
    
    // 这里可以添加你的业务逻辑,比如存储到数据库、设置会话变量等
    $_SESSION['selected_location'] = $storename;
    
    // 重定向到当前页面(或其他你需要的页面),用GET方式
    header('Location: mix_menu.php');
    exit; // 一定要exit,避免后续代码执行
}

// 处理GET请求的逻辑,比如从会话中读取之前选中的位置
$selected_location = isset($_SESSION['selected_location']) ? $_SESSION['selected_location'] : '';
?>

这样操作后,用户提交表单后会被重定向到mix_menu.php的GET请求,此时点击返回按钮,浏览器会回到原表单页面(GET请求),完全不会触发POST重提交的问题,自然也就不会出现ERR_CACHE_MISS了。

2. 保留原表单的选中状态(可选)

如果你希望用户返回原表单页面时,之前选择的位置能自动选中,可以在原表单页面通过会话变量来恢复选中状态:

修改原表单页面的代码(假设原页面是index.php):

<?php
session_start();
// 获取会话中保存的选中位置,默认空字符串
$selected_loc = isset($_SESSION['selected_location']) ? $_SESSION['selected_location'] : '';
?>
<div id="container" class="container justify-content-center">
  <form action="mix_menu.php" method="POST" class="form-horizontal justify-content-center">
    <div class="selectWrapper">
      <select type="text" name="location">
        <option value="loc1" <?php echo $selected_loc === 'loc1' ? 'selected' : ''; ?>>Location 1</option>
        <option value="loc2" <?php echo $selected_loc === 'loc2' ? 'selected' : ''; ?>>Location 2</option>
        <option value="loc3" <?php echo $selected_loc === 'loc3' ? 'selected' : ''; ?>>Location 3</option>
        <option value="loc4" <?php echo $selected_loc === 'loc4' ? 'selected' : ''; ?>>Location 4</option>
        <option value="loc5" <?php echo $selected_loc === 'loc5' ? 'selected' : ''; ?>>Location 5</option>
        <option value="loc6" <?php echo $selected_loc === 'loc6' ? 'selected' : ''; ?>>Location 6</option>
        <option value="loc7" <?php echo $selected_loc === 'loc7' ? 'selected' : ''; ?>>Location 7</option>
        <option value="loc8" <?php echo $selected_loc === 'loc8' ? 'selected' : ''; ?>>Location 8</option>
        <option value="loc9" <?php echo $selected_loc === 'loc9' ? 'selected' : ''; ?>>Location 9</option>
      </select>
    </div>
    <br>
    <div class="form-group row justify-content-center">
      <div class="offset-sm-auto text-center">
        <!-- 注意:你原来的按钮type是mix-submit,这是无效的,要改成submit才能提交表单 -->
        <button class="btn-lg" type="submit">Authorize</button>
      </div>
    </div>
  </form>
</div>

3. 改用GET方法提交(不推荐,仅临时场景)

如果你的业务场景不涉及敏感数据,也可以把表单的提交方法改成GET,这样位置信息会被放在URL参数里,返回页面时不会触发POST重提交:

修改原表单的method属性:

<form action="mix_menu.php" method="GET" class="form-horizontal justify-content-center">

然后在mix_menu.php中用$_GET['location']获取位置信息:

$storename = $_GET['location'];

不过这种方法会把位置参数暴露在URL中,不适合敏感数据,所以仅作为临时解决方案。

内容的提问来源于stack exchange,提问作者NoFlaire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:57:44