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

这是V2EX的设计问题?

  •  
  •   ofan · 2011-12-29 20:45:07 +08:00 · 4344 次点击
    这是一个创建于 4719 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚刚在 http://www.v2ex.com/t/24558 回复时,可能不小心多点了一下发送(没有返回前),就出现了一个重复回复。 这种情况不应该发生。
    这是不是跟http幂等性相关的设计问题?
    http://coolshell.cn/articles/4787.html
    25 条回复    1970-01-01 08:00:00 +08:00
    chuck911
        1
    chuck911  
       2011-12-29 20:59:22 +08:00
    POST方法不具备幂等性!
    PUT方法在此又不适用
    ofan
        2
    ofan  
    OP
       2011-12-29 21:07:48 +08:00
    ......不具备所以才要用幂等的设计
    9hills
        3
    9hills  
       2011-12-29 21:23:10 +08:00
    回复用ajax做就感觉好多了,现在回复还会刷新页面。。好古老的设计
    delectate
        4
    delectate  
       2011-12-29 21:23:49 +08:00
    试试……
    delectate
        5
    delectate  
       2011-12-29 21:24:12 +08:00
    木有效果啊。看来触发bug还要特殊环境的
    delectate
        6
    delectate  
       2011-12-29 21:24:51 +08:00
    @Livid 只是个测试,别封id哈。
    yyfearth
        7
    yyfearth  
       2011-12-29 21:29:33 +08:00
    @9hills 我就是用自己做的ajax脚本回复的。不过有个bug就是让v2ex的 已读 失效了。
    gDD
        8
    gDD  
       2011-12-29 21:29:46 +08:00
    可以考虑按`发送`以后按钮不可用10s左右。这样既能防止重复发帖又能防止POST失败以便再次POST。
    ofan
        9
    ofan  
    OP
       2011-12-29 21:33:35 +08:00
    @delectate 囧,这也叫没有效果...
    9hills
        10
    9hills  
       2011-12-29 21:34:02 +08:00
    用ajax一劳永逸,有想法的话,还能显示出一个进度条。

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