javascript - 使用自定义javascript后退按钮时删除POST数据

标签 javascript php session cookies navigation

我已经通过javascript将一些自定义导航按钮编码到了我正在处理的项目中-它们本质上是复制浏览器按钮的功能(最初并不清楚为什么需要单独的按钮,但是他们要求使用它们):

function goBack() { window.history.back(); }
function goForward() { window.history.forward(); }


但是,由于功能与浏览器的“后退”按钮相同,因此网站询问是否要返回包含该POST数据的页面,是否要重新提交POST数据,这是不可取的。理想情况下,为了适应当前的站点设置(所有POST都提交到原始页面,该页面检查POST数据并执行向数据库的相关提交),我想清除POST数据,因此没有重新提交请求。

我对人们可能会推荐的Post / Redirect / Get(PRG)并不熟悉,而且似乎没有涵盖不断按“后退”的概念。如果您提交表单,则将其发布到处理该发布操作的页面,然后重定向到GET页面-但是重定向仍在历史记录中,这意味着如果您返回,肯定会点击重定向页面并被发送“向前”?另外,PRG似乎主要集中在页面刷新上,这不是我目前正在寻找的内容。

PRG的概念似乎还归因于浏览器的后退按钮,不允许使用其他代码来控制POST数据,因此编码人员必须充分利用自己可以访问的内容。

由于我拥有相对自如的自定义后退按钮,该按钮可以允许对POST /会话/ cookie数据进行操作,因此我认为应该有某种方法可以在按下后退按钮时调用全局会话变量或cookie,然后将其拾取加载上一页以取消设置POST数据和全局会话变量/ cookie,但我实现此类尝试的尝试并未成功-它们只是setcookie('back', true)中的简单单行set($_SESSION['back']=true)goBack() PHP代码段>,以及页面前面的PHP:

<?php if (isset([either set cookie or set session variable]) {
    unset([either set cookie or set session variable]); // also tried changing 'true' to 'false' here
    unset($_POST);
}?>


这种行为是否可能发生,而我只是从错误的角度看待这种情况,还是在抑制POST以便重新设计站点以使用PRG的同时成功执行反向操作的唯一方法?页面加载/ POST提交中是否还有其他点可以清除POST数据,以允许我正在寻找的后退按钮功能?

编辑

例如,我导航到site.com/stuff/edit/[an ID],以编辑一项内容。第一次访问时,没有POST数据,因此isset($ _ POST)的PHP检查返回false,并且仅使用由GET填充的表单来呈现页面。

我修改表格,然后按提交。提交将POST数据发送到目标页面;这仍然是site.com/stuff/edit/[an ID]!但是,由于现在有了POST数据,PHP会选择它,并在页面上对其进行验证(您将在后面看到原因),并执行后端模型和控制器功能以将项目更新为服务于该站点的数据库。

根据更新是否成功,页面然后再次呈现表单,其中包含从GET检索的信息,该信息从服务器(修改或其他)中获取信息以及成功或失败消息。

如果要添加新项目,请导航至site.com/stuff/new;这会导航到与site.com/stuff/edit相同的页面,但是PHP代码确定了屏蔽URL,并呈现代码的不同方面,使其看起来像具有不同POST操作的其他页面-它还注意到没有传入ID。

我添加了一个项目,并且POST重定向回同一页面;但是,这次没有来自服务器的ID,这意味着后面的代码获取了它是新条目并执行插入的事实。然后,它显示带有链接以查看/编辑新项目的成功消息,或者显示带有预填充表单的失败消息,以减少将新项重新键入到表单中。

我希望这有助于显示此页面的工作方式;它不一定是我编写网站的方式,但我是从持续的情况中继承了工作,并与以这种方式进行编码的其他人一起工作,因此我需要保持一致或进行不干扰的更改,而不是对使用中的内容进行彻底的重新设计码。

最佳答案

我认为这应该可以做到:

function goBack() { 
    var referrer = document.referrer;
    if(referrer != '') {
        window.location = referrer;
    } else {
        window.history.back();
    }
}

关于javascript - 使用自定义javascript后退按钮时删除POST数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21161826/

相关文章:

javascript - 在 Javascript 对象中使用 'this'

javascript - 如何比较两个数组对象并在 vue.js 中的第一个数组中填充数据

javascript - react : Render parent component only if children will render

javascript - 在选项卡关闭时清除 PHP session ?

php - 在 PDO 选择查询中组合两列/字段

c# - 如何获取名称以特定字符串开头的所有 session 变量?

php - 如何将数据库中的图片显示到heredoc中?

php - 我如何在 PHP 中访问类实例的父级?

android - Web 服务 session 管理

ruby-on-rails - Ruby on Rails - 通过 IP 限制点击