【问题标题】:Handling back button处理返回按钮
【发布时间】:2009-10-15 22:24:14
【问题描述】:

我有一个需要几个步骤的注册表单。

在其中一个步骤中,他们填写了一些信息,然后选择了一些要上传的图像。

下一步,他们会看到对其申请的审核。

接下来可能发生的事情是,如果用户看到他不喜欢的东西,他会点击返回按钮来更改表单上的内容。

但是:

1) 他可能会收到有关表单提交的浏览器警告消息之一

2) 如果他真的回去了,我希望文件上传模块的行为有所不同(也许显示他上传的图像,让他改变他想要的那个)

如何更好地控制用户点击后退按钮时看到的内容?

附言。我正在使用 PHP(html、javascript 等...)。 对于应用程序过程的其他部分,我使用 ajax 行为来实时保存他们所做的任何事情(复选框等......)。因此,我将“继续”按钮设置为常规链接。 然而,在这里,上传文件使这个过程变得更加困难。

【问题讨论】:

    标签: php javascript forms


    【解决方案1】:

    您几乎已经回答了自己的问题,因为您认识到您需要对表单的每个阶段进行编码,以便它了解“状态”。我做了一些非常相似的声音形式,其中我跟踪会话变量中的每个阶段,仅在“确认您的详细信息”阶段之后提交数据(如在 db 中)。

    有兴趣的可以看an example here。在这种形式中,文件上传部分发生在“赞助细节”阶段。这些表单旨在使用或不使用 Javascript。在最后阶段之前不会发送或保存任何内容,因此请随意玩耍 - 上传一些示例文件,然后退后一步看看会发生什么。

    附:使用会话变量来跟踪每个阶段的一个优点(我发现)是它使保存和重新建立表单非常简单,因为您需要做的就是序列化 $_SESSION 数组并将其保存到数据库字段。

    【讨论】:

      【解决方案2】:

      1) 他可能会收到有关表单提交的浏览器警告消息之一

      见:Post/Redirect/Get

      2) 如果他真的回去了,我希望文件上传模块的行为有所不同(也许显示他上传的图像,让他改变他想要的那个)

      请参阅:da5id's answer

      【讨论】:

        【解决方案3】:

        关于第 1 点):使用Post/Redirect/Get 模式。这种模式简单但有效。用户发布表单后,通过 GET 请求将他们重定向到下一页。

        类似这样的东西(未经测试):

        <?php
        
            // let's say you determine the current step in the wizard with a GET parameter
            $step = isset( $_GET[ 'step' ] ) ? intval( $_GET[ 'step' ] ) : 1;
        
            if( 'post' == strtolower( $_SERVER[ 'REQUEST_METHOD' ] ) )
            {
                // we have a POSTed form submission
        
                /*
                    handle form submission
                */
        
                if( $success )
                {
                    // successful form submission, so increment step
                    $step += 1;
                }
                else
                {
                    // NON-successful form submission
                    /*
                        maybe save some error messages in a SESSION
                    */
                }
        
                /*
                    complete the POST/REDIRECT/GET pattern
        
                    redirect to the desired step in the wizard process with a GET request,
                    this prevents re-submission by browser refreshes and backbuttons
                */
                header( 'Location: http://example.com/yourformwizard?step=' . $step );
            }
        

        【讨论】:

          【解决方案4】:

          我不确定如果页面已发布到浏览器警告,您可以做些什么。我会为处理状态的用户提供一个单独的后退按钮(向导样式)。如果他们确实使用浏览器的后退按钮并忽略浏览器警告,那么您可能会使用会话变量或 cookie 等来跟踪用户的最后已知状态。

          【讨论】:

          • 如果他们确实使用了后退按钮,我认为它不会从服务器检索我的页面,它可能只是显示浏览器的最后一个想法,对吧?
          • @nute:实际上,这在很大程度上取决于您使用的缓存控制标头。如果你告诉浏览器不要缓存页面,那么通常它不会。
          猜你喜欢
          • 1970-01-01
          • 2019-01-20
          • 1970-01-01
          • 1970-01-01
          • 2017-08-16
          • 2017-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多