ofan
V2EX  ›  V2EX

这是V2EX的设计问题?

  •  
  •   ofan · Dec 29, 2011 · 5666 views
    This topic created in 5428 days ago, the information mentioned may be changed or developed.
    刚刚在 http://www.v2ex.com/t/24558 回复时,可能不小心多点了一下发送(没有返回前),就出现了一个重复回复。 这种情况不应该发生。
    这是不是跟http幂等性相关的设计问题?
    http://coolshell.cn/articles/4787.html
    25 replies  •  1970-01-01 08:00:00 +08:00
    chuck911
    chuck911
    Dec 29, 2011
    1
    POST方法不具备幂等性!
    PUT方法在此又不适用
    ofan
    ofan
    OP
    Dec 29, 2011
    2
    ......不具备所以才要用幂等的设计
    9hills
    9hills
    Dec 29, 2011
    3
    回复用ajax做就感觉好多了,现在回复还会刷新页面。。好古老的设计
    delectate
    delectate
    Dec 29, 2011
    4
    试试……
    delectate
    delectate
    Dec 29, 2011
    5
    木有效果啊。看来触发bug还要特殊环境的
    delectate
    delectate
    Dec 29, 2011
    6
    @Livid 只是个测试,别封id哈。
    yyfearth
    yyfearth
    Dec 29, 2011
    7
    @9hills 我就是用自己做的ajax脚本回复的。不过有个bug就是让v2ex的 已读 失效了。
    gDD
    gDD
    Dec 29, 2011
    8
    可以考虑按`发送`以后按钮不可用10s左右。这样既能防止重复发帖又能防止POST失败以便再次POST。
    ofan
    ofan
    OP
    Dec 29, 2011
    9
    @delectate 囧,这也叫没有效果...
    9hills
    9hills
    Dec 29, 2011
    10
    用ajax一劳永逸,有想法的话,还能显示出一个进度条。

    OT: 再慢的操作,只要有了进度条,就能给人一种很可靠的感觉。。。
    ofan
    ofan
    OP
    Dec 29, 2011
    11
    @gDD 这个方法最简单,但是有些情况不适用,比如客户端关闭了甚至不支持js的情况。这是有可能的,比如内嵌了html浏览器的桌面程序,手机上的浏览器,一些bot,一些下载工具(wget,aria..)等等
    chuck911
    chuck911
    Dec 29, 2011
    12
    @9hills 不ajax也是有各种好处的。豆瓣连留言板都没ajax
    @gDD 嗯,这个方法ok,其实按过一次就禁用掉也ok,反正提交完就是新页面了。
    @ofan 关了js也就是跟现在一样,又没别的害处啊
    cyberscorpio
    cyberscorpio
    Dec 29, 2011
    13
    @ofan 现在还有关 js 的?
    ofan
    ofan
    OP
    Dec 29, 2011
    14
    @cyberscorpio 关js和不支持js的属于同一种情况
    delectate
    delectate
    Dec 29, 2011
    15
    有。安了noscript。
    ofan
    ofan
    OP
    Dec 29, 2011
    16
    还有用油猴的firefox党,什么都是有可能发生的
    delectate
    delectate
    Dec 29, 2011
    17
    与其在客户端验证,不如服务器设限。同一id每5s只能提交一次。
    gDD
    gDD
    Dec 29, 2011
    18
    @ofan 关了JavaScript的话jQuery代码就不会运行了就`bind`不上按钮的`click`,然后基本发帖功能还是能用的,和目前的效果一样。
    chuck911
    chuck911
    Dec 29, 2011
    19
    @delectate 实现的麻烦程度不是一个等级的,这只是个体验问题
    ofan
    ofan
    OP
    Dec 29, 2011
    20
    我的意思是说不用js的方法,主贴里给了链接了嘛,去看看. 可以每次页面get时,服务器返回一个ticketID,然后在回复时讲此id作为一个参数 ?tid=... ,这样服务器端添加完回复后要返回新的页面,里面再带一个新的ticketID,旧的ticketID失效。这样就保证每次只能回复一次
    ofan
    ofan
    OP
    Dec 29, 2011
    21
    然后旧的id在一定时间后重新有效,比如一小时后..
    delectate
    delectate
    Dec 29, 2011
    22
    记得phpbb论坛有个sid串号问题。就是说你发的链接如果带上sid=***的信息,别人(未登录)访问此链接,就会以发帖人权限登录论坛。
    ofan
    ofan
    OP
    Dec 29, 2011
    23
    对,就这意思,这种技术web里应该用的非常多啊,不知道这里为嘛不用。重复回复的问题,我记得只有在asp流行的时代比较多
    cyberscorpio
    cyberscorpio
    Dec 29, 2011
    24
    @ofan 我就是这个意思,关 js 的很少,不支持的几乎没有。
    ofan
    ofan
    OP
    Dec 29, 2011
    25
    @cyberscorpio 我已经列出不支持的情况了,特别是对于移动设备,能不用js的就不用js
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   698 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 18:02 · PVG 02:02 · LAX 10:02 · JFK 13:02
    ♥ Do have faith in what you're doing.