发现一个表单提交的奇怪现象。

2020-11-18 16:14:55 +08:00
 dujiangbo
发现一个有意思的现象:
Php 写的一个函数,内容是一个表单页面,和获取表单提交数据后的处理,表单没有指定 action,默认应该由当前 URL 处理,也就是说还是由这个函数处理,确实这个函数拿到了表单提交的数据并进行了处理,处理数据的程序在函数最前面,处理完成后就中止程序,表单在后面,但数据处理完成,程序中止后表单任然显示并可以再次提交数据,也就是说表单无视中止程序仍然显示,这是为什么?表单提交后不是应该重新载入页面吗?
2945 次点击
所在节点    PHP
18 条回复
Curtion
2020-11-18 16:18:53 +08:00
可能是浏览器缓存
GM
2020-11-18 16:49:48 +08:00
吐槽无力。。。。。你到底在说什么啊?
dujiangbo
2020-11-18 17:04:57 +08:00
@GM
Function
If 获得表单数据
数据处理程序
Die()
表单页面

就是这么个函数。
zhengwenk
2020-11-18 17:16:34 +08:00
页面重新载入后 仍然显示表单并可以提交数据,这有什么问题,真不是很正常么?
dujiangbo
2020-11-18 17:23:07 +08:00
@zhengwenk 函数中数据处理模块结束后就 die 了啊,后面的表单应该不显示啊。
wangritian
2020-11-18 17:43:02 +08:00
建议写一份演示代码
dujiangbo
2020-11-18 22:46:37 +08:00
我明白了,数据处理程序没有任何 HTML 内容,是从数据库查询推送浏览器下载的动作,然后就 die 了,是不是因为浏览器没有接到 HTML 内容所以不刷新页面?
gogo789
2020-11-19 10:32:58 +08:00
你 form 表单怎么提交的,同步还是异步???
ben1024
2020-11-19 12:17:51 +08:00
_blank ?
dujiangbo
2020-11-19 12:28:06 +08:00
@gogo789 没用 Ajax,就是直接 submit 提交。
dujiangbo
2020-11-19 12:28:34 +08:00
@ben1024 没有设置 target 。
ben1024
2020-11-19 12:33:52 +08:00
@dujiangbo
装个 debug 看下,
如果这个场景估计有提前 echo,或者 ob_push,一类的输出在终止之前
treblex
2020-11-19 13:27:15 +08:00
if req.method=="post" {} else {} ,php 应该可以做到这样
lijialong1313
2020-11-19 16:06:33 +08:00
会不会因为你提交表单的方法不对(例如用了 get ),浏览器瞎给你缓存了
jowan
2020-11-19 16:19:35 +08:00
因为你处理完数据返回给浏览器的响应头不是 text/html
也就是 Content-Type 肯定是 application/download 之类的
如果服务端响应没问题 浏览器当然不会刷新页面 会直接弹出下载提示
另外你的表达能力。。
joychen666
2020-11-19 16:53:00 +08:00
用 Chrome 开发者工具,看一下表单提交的 Request 和 Response 内容, 应该就知道是什么情况了。
DOLLOR
2020-11-19 17:10:20 +08:00
提交后最好 302 或 303 跳到其他页面去,再在新的页面通过前端 location.href 跳回 form 页面,就能强制清空 input 里的内容了。
dujiangbo
2020-11-20 13:18:58 +08:00
@jowan 就是这个原因,服务器推送的是数据。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/726748

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX