发现一个表单提交的奇怪现象。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dujiangbo
V2EX    PHP

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

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

    就是这么个函数。
    zhengwenk
        4
    zhengwenk  
       2020-11-18 17:16:34 +08:00
    页面重新载入后 仍然显示表单并可以提交数据,这有什么问题,真不是很正常么?
    dujiangbo
        5
    dujiangbo  
    OP
       2020-11-18 17:23:07 +08:00 via iPhone
    @zhengwenk 函数中数据处理模块结束后就 die 了啊,后面的表单应该不显示啊。
    wangritian
        6
    wangritian  
       2020-11-18 17:43:02 +08:00
    建议写一份演示代码
    dujiangbo
        7
    dujiangbo  
    OP
       2020-11-18 22:46:37 +08:00 via iPhone
    我明白了,数据处理程序没有任何 HTML 内容,是从数据库查询推送浏览器下载的动作,然后就 die 了,是不是因为浏览器没有接到 HTML 内容所以不刷新页面?
    gogo789
        8
    gogo789  
       2020-11-19 10:32:58 +08:00
    你 form 表单怎么提交的,同步还是异步???
    ben1024
        9
    ben1024  
       2020-11-19 12:17:51 +08:00
    _blank ?
    dujiangbo
        10
    dujiangbo  
    OP
       2020-11-19 12:28:06 +08:00 via iPhone
    @gogo789 没用 Ajax,就是直接 submit 提交。
    dujiangbo
        11
    dujiangbo  
    OP
       2020-11-19 12:28:34 +08:00 via iPhone
    @ben1024 没有设置 target 。
    ben1024
        12
    ben1024  
       2020-11-19 12:33:52 +08:00
    @dujiangbo
    装个 debug 看下,
    如果这个场景估计有提前 echo,或者 ob_push,一类的输出在终止之前
    treblex
        13
    treblex  
       2020-11-19 13:27:15 +08:00
    if req.method=="post" {} else {} ,php 应该可以做到这样
    lijialong1313
        14
    lijialong1313  
       2020-11-19 16:06:33 +08:00
    会不会因为你提交表单的方法不对(例如用了 get ),浏览器瞎给你缓存了
    jowan
        15
    jowan  
       2020-11-19 16:19:35 +08:00
    因为你处理完数据返回给浏览器的响应头不是 text/html
    也就是 Content-Type 肯定是 application/download 之类的
    如果服务端响应没问题 浏览器当然不会刷新页面 会直接弹出下载提示
    另外你的表达能力。。
    joychen666
        16
    joychen666  
       2020-11-19 16:53:00 +08:00
    用 Chrome 开发者工具,看一下表单提交的 Request 和 Response 内容, 应该就知道是什么情况了。
    AV1
        17
    AV1  
       2020-11-19 17:10:20 +08:00 via Android
    提交后最好 302 或 303 跳到其他页面去,再在新的页面通过前端 location.href 跳回 form 页面,就能强制清空 input 里的内容了。
    dujiangbo
        18
    dujiangbo  
    OP
       2020-11-20 13:18:58 +08:00 via iPhone
    @jowan 就是这个原因,服务器推送的是数据。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5643 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 45ms UTC 02:56 PVG 10:56 LAX 18:56 JFK 21:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86