V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dujiangbo
V2EX  ›  PHP

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

  •  
  •   dujiangbo · 2020-11-18 16:14:55 +08:00 via iPhone · 3091 次点击
    这是一个创建于 1500 天前的主题,其中的信息可能已经有所发展或是发生改变。
    发现一个有意思的现象:
    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 内容, 应该就知道是什么情况了。
    DOLLOR
        17
    DOLLOR  
       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   ·   实用小工具   ·   3029 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:15 · PVG 08:15 · LAX 16:15 · JFK 19:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.