如何使功能仅在第一个主体加载时起作用?
Posted
技术标签:
【中文标题】如何使功能仅在第一个主体加载时起作用?【英文标题】:How to make a function only work on first body onload? 【发布时间】:2011-05-11 23:48:15 【问题描述】:我有一个分类网站,当用户第一次进入网站时,会在 body onload 事件上提交一个表单:
表单已提交并在同一页面上的 iframe 中显示其结果。
问题是我不希望每次用户在浏览器中单击后退或前进时都调用 submit_form() 函数,那么如何防止浏览器在使用后退/前进按钮时提交它?
例子:
用户进入网站时提交表单。 表单在 iframe 中显示搜索结果 用户单击其中一个结果并显示新页面 用户点击返回按钮再次转到搜索结果 用户发现表单再次被重新提交,因为 body onload 触发器
我应该如何解决这个问题?
谢谢
【问题讨论】:
@Chinmayee 为什么要从标签中删除 php 和 mysql?我认为它们是相关的。 这个问题是通用的,可以应用于任何语言,如 java、.net。数据库技术也与这个问题无关。第三,我们可以为任何问题设置 5 个标签,所以我认为 session/cookie 是比 php 和 mysql 更相关的标签 @Chinmayee 你怎么知道他想要会话或cookie?它们确实有一些相关性,但是有 php 和 mysql 更有帮助,因为你知道他会考虑服务器端和/或数据库方法。 【参考方案1】:仅客户端解决方案:设置cookie。
【讨论】:
对于禁用 cookie 的人,您可以对 URL 进行后备(例如提供参数 ?fristrun=true)【参考方案2】:你用 php 标记了这个问题,所以我认为使用服务器端会话更好
开始一个会话,初始化一个会话 varto 0用户进入网站时提交表单。
如果 session var == 0 则显示结果表单在 iframe 中显示搜索结果
将会话变量设置为 1用户单击其中一个结果并显示新页面 用户点击返回按钮再次进入搜索结果
这不会发生:用户发现表单再次被重新提交,因为 body onload 触发器
【讨论】:
不会提交仍然发生,只有 php 不返回响应?我认为解决方案需要基于客户端/cookie 才能首先停止提交.. 好的,cookie 也可以。我只是控制第二页上的会话以上是关于如何使功能仅在第一个主体加载时起作用?的主要内容,如果未能解决你的问题,请参考以下文章