我有网页(file_list.php
)显示文件列表,每个文件旁边都有一个删除它的按钮。当用户按下DELETE按钮接近某个文件名时,浏览器会转到一个名为 delete_file.php
的脚本,删除该文件,然后它会告诉浏览器返回file_list.php
delete_file.php
使用简单的header("Location: file_list.php”);
返回file_list.php
当浏览器返回file_list.php
时,重新加载页面,但它不会再将其向后滚动到用户所在的位置。因此,假设用户滚动文件列表并删除了最后一个文件,当浏览器再次显示页面file_list.php
时,它将不再滚动到页面底部。
我发现了一种奇怪的解决方法,基本上是,而不是header("Location: file_list.php”);
中使用delete_file.php
我只是使用javascript调用window.history.go(-1)
。
当用户在会话中(仅使用PHP session_start
函数)时,此解决方法非常有效:浏览器RELOADS file_list.php页面,然后将其滚动回到哪里它是在之前。
但是如果用户不在会话中,浏览器会滚动页面,但之前它不会重新发送它,因此用户仍然会在文件列表中看到他删除的文件。
您是否知道如果我们不在会话中,当回到会话时如何重现浏览器的行为?
你是否知道如何解决这个问题,甚至是解决这个问题的另一种方式?
谢谢!
我知道我可以使用AJAX删除文件,所以我不必每次都去delete_file.php,但这不是答案。
答案 0 :(得分:5)
你可以发射锚点:
<a name="anchor1"/>filename_this
<a name="anchor2"/>filename_that
要删除filename_this
,请传递删除页面filename_this以及anchor1
。然后,删除页面会重定向到file_list.php#anchor1
请注意,锚名称不应映射到文件名。这样当你删除第五个文件时,锚点就在“新”第五个文件附近(以前是旧文件)。
答案 1 :(得分:3)
当您使用header('location: A.php');
时,您正在指示浏览器转发到另一个页面。它以前从未出现过,因此无法知道滚动位置是什么。
当您使用history.go(-1)
时,您正在指示浏览器单击后退按钮,这就是您的解决方法有效的原因。您可能会发出no-cache
标头,这就是浏览器重新加载页面的原因。这里的效果与重新加载页面相同(无需导航)。这样做的问题在于,用户可以单击“转发”按钮,再次到达delete_file.php
(最终可能会意外删除另一个文件)。
一些想法:
header('file_list.php#file3');
。 在我看来,最简单的解决方案是:缩短页面。如果你的页面不够长,无法滚动,那就没问题了。
答案 2 :(得分:0)
如何提交IFRAME? (根本没有JS?你将无法隐藏已删除的条目......)
答案 3 :(得分:0)
总而言之,您的步骤是:
1)“显示文件列表”
的网页(file_list.php)2)“delete_file.php删除文件,然后告诉浏览器返回file_list.php”
我假设file_list.php只显示目录的当前内容,显然不包括刚刚删除的文件。但是你希望file_list.php以某种方式向用户暗示他们刚刚删除的文件,例如跳回文件通常在列表中的位置,如果它仍然存在的话。可能有几十种方法可以做到这一点。
1)delete_file.php打开url“/file_list.php#the_file_i_just_dele.ted”。在数组中收集目录内容后,将'the_file_i_just_dele.ted'插入到该数组中,可能按字母顺序或其他任何内容。该数组应该有另一个布尔字段:“deleted”=&gt; 1 | 0,在删除文件的情况下将是1.在通过数组进行回显列表时,在每个列表项旁边添加一个html锚点,它可以只是文件名。如果“已删除”为1,请不要回显旁边的“删除”按钮。在页面打开时,页面将直接跳转到'the_file_i_just_dele.ted'锚点。
2)使用ajax。
3)为您的所有文件系统操作都有一个单独的php库文件。 file_list.php是客户端需要查看的唯一页面。在删除时,file_list.php将发布到自身,并在网址中附加'#deleted',将目录内容收集到一个数组中,然后删除所请求的文件,回显数组,当你删除的文件是在循环中遇到,禁用或不绘制'删除'按钮和回显它旁边的'已删除'html锚点。在页面打开时,客户端将自动跳转到“已删除”锚点。
4)制作一个购物车,而不是担心整个“跟踪用户在上一页的位置”问题。让用户检查要删除的每个文件。如果“购物”体验跨越多个目录和页面,则使用cookie,DB或会话文件来跟踪购物车内容。用户单击页面底部的单个“删除”按钮。添加“结帐确认”页面,要求用户确认删除列出的文件。
...等...
您也可以根据需要混合搭配解决方案。