NaN 2023-09-27 16:46 采纳率: 14.3%
浏览 21
已结题

ERR_CACHE_MISS 确认重新提交表单

form post表单提交 点击提交跳转到下一个页面!再点击浏览器的后退 浏览器就会报确认重新提交表单!这个问题有朋友遇到过吗!如何解决

  • 写回答

16条回答 默认 最新

  • 前网易架构师-高司机 游戏服务器领域优质创作者 2023-09-27 16:56
    关注
    获得0.60元问题酬金

    要么你就防止后退是,当用户点击浏览器的后退按钮会导致页面状态异常或者数据异常的情况。
    使用location.replace方法。在进行页面跳转时,可以使用location.replace方法代替location.href或者location.assign方法,实现跳转后无法后退的效果。

    <script>
            $(function () {
                //禁用“确认重新提交表单”
                window.history.replaceState(null, null, window.location.href);
            })
    </script>
    
    

    这种是非常常见的手法
    或者使用history API。在页面跳转时,可以使用history API(如pushState、replaceState等方法)实现页面状态的修改,避免页面状态异常。

    要么你这样做:
    在提交页面你生成一个token,提交的时候携带上这个token,当服务器处理完之后这个token就失效了, 那么当回退后重复提交的就不会在被服务器处理了
    这两种都可以的

    评论 编辑记录
  • Leodong. 2023-09-27 16:48
    关注
    获得0.60元问题酬金

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    这个问题是因为浏览器的缓存导致的。当你点击提交按钮后,页面会跳转到下一个页面,但是浏览器仍然会从缓存中加载这个页面,所以当你点击后退时,浏览器会提示你确认是否重新提交表单。解决方法是在表单提交时,添加一个随机参数或者时间戳,这样每次提交时都会生成一个新的URL,浏览器就不会使用缓存的页面了。具体操作如下:

    1. 在表单的action属性中,添加一个随机参数或者时间戳。例如:
      <form action="your_page.php?random_param=<?php echo time(); ?>" method="post">
      
    2. 在服务器端(这里是PHP),获取这个随机参数或者时间戳,然后拼接真正的URL。例如:
      $random_param = $_GET['random_param'];
      $real_url = "your_page.php?param=" . $random_param;
      
    3. 使用header()函数设置正确的HTTP头,以便浏览器不会从缓存中加载页面。例如:
      header("Location: " . $real_url);
      exit;
      
      这样,每次提交表单时,都会生成一个新的URL,浏览器就不会使用缓存的页面了。

    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论 编辑记录
  • 专家-赤兔[在线] 2023-09-27 16:49
    关注
    获得0.60元问题酬金

    引自免费微信小程序-皆我百晓生,希望对题主有所帮助,如有帮助,还望采纳。


    ERR_CACHE_MISS错误是由于浏览器缓存问题造成的。浏览器会缓存POST请求的结果,并在用户后退时尝试重新提交。然而,如果服务器端已经处理了POST请求,再次提交就会导致重复操作。

    为了解决这个问题,你可以采取以下几种方法之一:

    1. 使用PRG模式(Post/Redirect/Get):在用户提交表单后,将其重定向到另一个页面,而不是直接跳转到下一个页面。这样,在用户后退时,浏览器会重新发送GET请求而不会重复提交POST请求。

    2. 禁用浏览器缓存:可以通过在服务器响应头中添加适当的缓存控制头来禁用浏览器缓存。例如,在服务器端的响应中添加以下HTTP头:

      Cache-Control: no-cache, no-store, must-revalidate
      Pragma: no-cache
      Expires: 0
      

      这样浏览器将不会缓存该页面,当用户返回后将重新请求最新数据。

    3. 使用ajax提交表单:使用ajax异步提交表单,而不是直接提交表单。这样,在用户后退时,浏览器不会尝试重新提交表单,避免了ERR_CACHE_MISS错误的发生。

      例如,使用jQuery的ajax方法提交表单:

      $.ajax({
          url: 'submit_form.php',
          type: 'POST',
          data: $('#myForm').serialize(),
          success: function(response) {
              // 处理成功响应
              // 跳转到下一个页面
              window.location.href = 'next_page.html';
          }
      });
      

    以上是一些常见的解决方法,根据具体情况选择合适的方法来解决ERR_CACHE_MISS错误。

    评论
  • 程序员Ale-阿乐 2023-09-27 16:56
    关注
    获得0.40元问题酬金

    遇到浏览器报“确认重新提交表单”的问题通常是因为浏览器认为您在刷新或后退时尝试重新提交之前的表单数据。这是浏览器的一种安全特性,旨在防止无意中重复提交表单。要解决这个问题,您可以考虑以下几种方法:

    1. 使用重定向: 在表单提交后,服务器可以重定向到另一个页面,而不是直接返回表单提交结果。这样,当用户后退时,他们将返回到不包含表单提交的页面。
    2. 使用POST-REDIRECT-GET模式(PRG模式): 这是一种常见的模式,用于避免表单重复提交问题。在提交表单后,服务器将用户重定向到另一个页面,然后用户可以安全地后退,因为表单提交已经完成,不会再次提交。
    3. 禁用表单重复提交检测: 这不是一种推荐的方法,因为它牺牲了一定的安全性。但如果您确信您的应用程序没有问题,您可以尝试禁用浏览器的表单重复提交检测。但请谨慎使用这个方法,因为它可能会导致一些安全风险。
    4. 使用JavaScript重定向: 在表单提交后,您可以使用JavaScript来重定向到另一个页面,这也可以防止后退时的表单重新提交问题。
    评论
  • 桂圆肉肉 2023-09-27 17:00
    关注

    执行:window.history.replaceState(null, null, window.location.href);

    评论
  • 玥轩_521 2023-09-27 17:47
    关注
    获得0.60元问题酬金

    援引通义千问:
    在JavaScript中,当你提交一个表单时,浏览器会保存这个表单的提交信息。如果你点击浏览器的后退按钮,然后再次提交这个表单,浏览器会发现这个表单的提交信息已经被保存,因此它会提示你确认是否重新提交表单。
    解决这个问题的一种方法是删除表单的提交信息。你可以使用JavaScript的delete关键字来删除表单的提交信息。例如,你可以将以下代码添加到你的JavaScript代码中:

    document.querySelector('form').reset();
    

    这段代码会删除表单的所有提交信息,并将表单重置为初始状态。这样,当你再次提交这个表单时,浏览器就不会提示你确认是否重新提交表单了。
    注意,这种方法可能会导致一些问题。例如,如果你在表单中输入了一些信息,并且删除了表单的提交信息,那么这些信息将会丢失。因此,在使用这种方法时,你需要确保它不会导致信息丢失。

    评论
  • 心梓知识 2023-09-27 18:08
    关注
    获得0.60元问题酬金

    结合GPT给出回答如下请题主参考
    这个错误通常是在浏览器缓存中找不到表单数据时触发的。可能的原因是表单提交后页面被重新加载或重定向,浏览器缓存中的表单数据被清除,导致后退时无法重复提交表单。

    要解决这个问题,有以下几个建议:

    1. 禁用缓存:在表单提交的页面添加以下代码,禁用浏览器的缓存,确保每次表单提交后,页面都会被重新加载。
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    
    1. 使用重定向:在表单提交后,可以使用重定向而不是直接加载下一个页面。这将确保在后退时不会重复提交表单。
    header("Location: nextpage.php");
    
    1. 避免重新加载:在使用 AJAX 或 JavaScript 提交表单时,可以避免页面被重新加载。这将确保提交表单后页面仍然保持原样,避免浏览器缓存被清除的问题。
    $.ajax({
        type: "POST",
        url: "submit-form.php",
        data: formData,
        success: function(response) {
            // handle response
        }
    });
    

    以上是几种解决方案,您可以根据具体情况选择适合的方法。

    评论
  • 想你依然心痛 全栈领域新星创作者 2023-09-27 18:14
    关注
    获得0.60元问题酬金

    这个问题通常是因为提交表单后没有使用重定向(redirect)到下一个页面,而是直接渲染了下一个页面,这样当用户点击浏览器的后退按钮时,浏览器会尝试重新提交表单,导致该错误出现。要解决这个问题,可以使用重定向到下一个页面,这样当用户点击浏览器的后退按钮时,浏览器只是重新加载上一个页面,而不会重新提交表单。在代码中,您可以在表单处理完毕后使用重定向到下一个页面,例如:

    return redirect('/nextpage');
    

    其中,/nextpage是您要重定向到的下一个页面的 URL。这样就可以避免出现确认重新提交表单的错误了。

    评论
  • 数据大魔王 2023-09-27 22:00
    关注
    获得0.80元问题酬金

    这是一个常见的问题。

    1. 使用重定向:在表单提交后,将用户重定向到下一个页面,而不是将用户停留在提交的页面上。这样在用户点击后退按钮时,浏览器会返回到上一个页面而不会尝试重新提交表单。

    2. 使用Post/Redirect/Get(PRG)模式:这种模式通过在表单提交后的处理程序中进行重定向来解决问题。表单提交后,将用户重定向到下一个页面,并使用GET方法加载下一个页面。这样,在用户点击后退按钮时,浏览器只是重新加载上一个页面,而不会重新提交表单。

    以下是一个示例代码,演示了如何使用Python的Flask框架实现Post/Redirect/Get模式:

    from flask import Flask, redirect, request, render_template
    
    app = Flask(__name__)
    
    @app.route('/', methods=['GET', 'POST'])
    def form():
        if request.method == 'POST':
            # 处理表单提交的数据
            # ...
            
            # 重定向到下一个页面
            return redirect('/next_page')
        else:
            return render_template('form.html')  # 展示表单页面
    
    @app.route('/next_page')
    def next_page():
        return render_template('next_page.html')  # 展示下一个页面
    

    在上面的示例中,当用户提交表单时,使用redirect()函数将用户重定向到/next_page页面。这样在用户点击后退按钮时,浏览器只会重新加载/页面,而不会重新提交表单。

    评论
  • bug菌¹ Java领域优质创作者 2023-09-28 01:10
    关注
    获得1.00元问题酬金

    该回答引用ChatGPT,希望对题主有所帮助,如有帮助,还望采纳。


    这个问题通常是由于浏览器缓存中的表单数据没有同步更新引起的。您可以尝试以下解决方案:

    1. 在表单中添加以下属性:autocomplete="off"。这将禁用浏览器自动填充表单数据。

    2. 在表单的提交代码中添加以下代码:window.location.href = window.location.href;。这将强制浏览器刷新页面,以确保表单数据已同步更新。

    3. 使用POST-REDIRECT-GET模式,即在处理完表单数据后重定向到另一个页面,避免重复提交表单。

    希望以上解决方案对您有所帮助!

    评论
  • 故事不长丨 2023-09-28 09:01
    关注
    获得0.40元问题酬金
    • 使用重定向:在处理表单提交后,服务器可以将用户重定向到下一个页面,而不是仅仅展示成功提交的信息。这样,在用户点击浏览器的后退按钮时,浏览器会跳转到重定向的页面而不会触发确认重新提交表单的错误。
    • 禁用缓存:您可以在表单页面的响应头中添加 no-cache 指令,这样浏览器就不会缓存该页面的内容,从而避免了重新加载已经被提交的表单数据的问题。具体的方法取决于服务器端使用的技术和框架,请参考相关文档进行设置。
    • 使用 Post/Redirect/Get 模式:这种模式是一种常见的web开发模式,它可以避免表单重复提交的问题。当用户提交表单后,服务器首先进行表单的处理,然后使用重定向将用户导航到一个新的页面。这样,即使用户点击浏览器的后退按钮,也不会出现确认重新提交表单的错误。
    评论
  • yy64ll826 2023-09-28 11:14
    关注
    获得0.40元问题酬金
    评论
  • 比特流1024 2023-09-28 16:09
    关注
    获得0.40元问题酬金

    参考gpt4:
    结合自己分析给你如下建议:
    这个问题是因为浏览器的缓存导致的。当你点击提交按钮后,表单数据会被发送到服务器并进行处理。然后,当用户点击浏览器的后退按钮时,浏览器会尝试从缓存中加载之前的页面,而不是重新向服务器发送请求。这就导致了表单数据被重复提交的问题。
    要解决这个问题,你可以尝试以下方法:
    在表单提交时,添加一个时间戳或随机数参数,以确保每次提交的数据都是唯一的。这样,即使用户点击浏览器的后退按钮,浏览器也会认为这是一个新的请求,从而避免重复提交表单。例如:

    <form action="your_action" method="post">
      <input type="hidden" name="timestamp" value="<?php echo time(); ?>">
      <!-- 其他表单字段 -->
      <input type="submit" value="提交">
    </form>
    

    使用JavaScript禁用浏览器的缓存功能。这可以通过在表单提交时触发一个JavaScript函数来实现。这个函数会阻止表单的默认提交行为,并手动发送一个请求到服务器。例如:

    <form id="myForm" action="your_action">
      <!-- 表单字段 -->
      <input type="submit" value="提交">
    </form>
    
    <script>
    document.getElementById('myForm').addEventListener('submit', function(event) {
      event.preventDefault(); // 阻止表单的默认提交行为
      // 发送一个请求到服务器,例如使用Ajax
    });
    </script>
    

    如果以上方法仍然无法解决问题,你可以考虑使用HTTPS协议来加密你的表单数据。这样,即使用户查看页面源代码,也无法轻易地看到和提交表单数据。但请注意,这种方法并不能解决浏览器缓存问题,只是提高了数据传输的安全性。

    评论
  • 关注
    获得0.60元问题酬金

    表单设置成禁止重复提交即可

    评论
  • 会跑的小鹿 2023-10-04 23:32
    关注
    获得0.20元问题酬金

    加个防止后退代码逻辑

    评论
  • GIS工具开发 2023-10-04 23:55
    关注
    获得0.60元问题酬金

    检测一下后退,然后刷新界面

    评论

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 创建了问题 9月27日

悬赏问题

  • ¥30 哈夫曼编码译码器打印树形项目
  • ¥20 求完整顺利登陆QQ邮箱的python代码
  • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL
  • ¥15 网络打印机Ip地址自动获取出现问题
  • ¥15 求局部放电案例库,用于预测局部放电类型
  • ¥100 QT Open62541
  • ¥15 stata合并季度数据和日度数据
  • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
  • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?
  • ¥15 用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色