dujiangbo
V2EX  ›  PHP

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

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

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