【问题标题】:Post data and refresh page发布数据并刷新页面
【发布时间】:2011-03-25 01:00:48
【问题描述】:

我有一个编辑表单页面来编辑我的网站帖子。 它使用 post 方法到同一页面。 如果表单编译正确,则会显示祝贺消息。

问题:

当用户点击刷新按钮时,脚本会尝试再次将数据重新发布到页面。 有没有办法避免这种情况?

谢谢

卢卡

【问题讨论】:

    标签: php html http-post


    【解决方案1】:

    PRG 模式的大致轮廓是这样的:

    if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
    {
         /// do your magic
    
         $_SESSION['error'] = "Thanks for your message!";
    
         // this should be the full URL per spec, but "/yourscript.php" will work
         $myurl = ...;
    
         header("Location: $myurl");
         header("HTTP/1.1 303 See Other");
         die("redirecting");
    }
    
    if ( isset($_SESSION['error']) )
    {
         print "The result of your submission: ".$_SESSION['error'];
         unset($_SESSION['error']);
    }
    

    【讨论】:

      【解决方案2】:

      您需要使用PRG 模式。

      【讨论】:

        【解决方案3】:

        这称为Post/Redirect/Get 模式。您可以通过使用 302/303 重定向来响应 POST 请求来做到这一点,这可以防止客户端出现这种麻烦的行为。

        您可以在我上面发布的链接中阅读更多相关信息。

        【讨论】:

          【解决方案4】:

          您应该使用上面已经提到的 PRG 模式! 只是为了完整起见,如果您的表单依赖于 js,我添加了使用 javascript history.replaceState 的可能性(例如,noscript 应该使表单无效或类似的东西......)。

          <script>
            window.history.replaceState({}, '#no-reload');
          </script>
          

          【讨论】:

            猜你喜欢
            • 2019-08-07
            • 1970-01-01
            • 2014-06-19
            • 1970-01-01
            • 2018-01-25
            • 2011-08-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多