dujiangbo
V2EX  ›  PHP

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

  •  
  •   dujiangbo · Nov 18, 2020 via iPhone · 3691 views
    This topic created in 2041 days ago, the information mentioned may be changed or developed.
    发现一个有意思的现象:
    Php 写的一个函数,内容是一个表单页面,和获取表单提交数据后的处理,表单没有指定 action,默认应该由当前 URL 处理,也就是说还是由这个函数处理,确实这个函数拿到了表单提交的数据并进行了处理,处理数据的程序在函数最前面,处理完成后就中止程序,表单在后面,但数据处理完成,程序中止后表单任然显示并可以再次提交数据,也就是说表单无视中止程序仍然显示,这是为什么?表单提交后不是应该重新载入页面吗?
    18 replies    2020-11-20 13:18:58 +08:00
    Curtion
        1
    Curtion  
       Nov 18, 2020
    可能是浏览器缓存
    GM
        2
    GM  
       Nov 18, 2020
    吐槽无力。。。。。你到底在说什么啊?
    dujiangbo
        3
    dujiangbo  
    OP
       Nov 18, 2020 via iPhone
    @GM
    Function
    If 获得表单数据
    数据处理程序
    Die()
    表单页面

    就是这么个函数。
    zhengwenk
        4
    zhengwenk  
       Nov 18, 2020
    页面重新载入后 仍然显示表单并可以提交数据,这有什么问题,真不是很正常么?
    dujiangbo
        5
    dujiangbo  
    OP
       Nov 18, 2020 via iPhone
    @zhengwenk 函数中数据处理模块结束后就 die 了啊,后面的表单应该不显示啊。
    wangritian
        6
    wangritian  
       Nov 18, 2020
    建议写一份演示代码
    dujiangbo
        7
    dujiangbo  
    OP
       Nov 18, 2020 via iPhone
    我明白了,数据处理程序没有任何 HTML 内容,是从数据库查询推送浏览器下载的动作,然后就 die 了,是不是因为浏览器没有接到 HTML 内容所以不刷新页面?
    gogo789
        8
    gogo789  
       Nov 19, 2020
    你 form 表单怎么提交的,同步还是异步???
    ben1024
        9
    ben1024  
       Nov 19, 2020
    _blank ?
    dujiangbo
        10
    dujiangbo  
    OP
       Nov 19, 2020 via iPhone
    @gogo789 没用 Ajax,就是直接 submit 提交。
    dujiangbo
        11
    dujiangbo  
    OP
       Nov 19, 2020 via iPhone
    @ben1024 没有设置 target 。
    ben1024
        12
    ben1024  
       Nov 19, 2020
    @dujiangbo
    装个 debug 看下,
    如果这个场景估计有提前 echo,或者 ob_push,一类的输出在终止之前
    treblex
        13
    treblex  
       Nov 19, 2020
    if req.method=="post" {} else {} ,php 应该可以做到这样
    lijialong1313
        14
    lijialong1313  
       Nov 19, 2020
    会不会因为你提交表单的方法不对(例如用了 get ),浏览器瞎给你缓存了
    jowan
        15
    jowan  
       Nov 19, 2020
    因为你处理完数据返回给浏览器的响应头不是 text/html
    也就是 Content-Type 肯定是 application/download 之类的
    如果服务端响应没问题 浏览器当然不会刷新页面 会直接弹出下载提示
    另外你的表达能力。。
    joychen666
        16
    joychen666  
       Nov 19, 2020
    用 Chrome 开发者工具,看一下表单提交的 Request 和 Response 内容, 应该就知道是什么情况了。
    AV1
        17
    AV1  
       Nov 19, 2020 via Android
    提交后最好 302 或 303 跳到其他页面去,再在新的页面通过前端 location.href 跳回 form 页面,就能强制清空 input 里的内容了。
    dujiangbo
        18
    dujiangbo  
    OP
       Nov 20, 2020 via iPhone
    @jowan 就是这个原因,服务器推送的是数据。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2702 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 12:51 · PVG 20:51 · LAX 05:51 · JFK 08:51
    ♥ Do have faith in what you're doing.