大家还记得半年前的 wwurl 么,现在已经完成了

2015-09-18 22:28:33 +08:00
 Andy1999
半年前,我们团队 6 个人要打造一个新的短链服务。然而半年之中,离去的离去,弃坑的弃坑,留下一个半残品。
最近正好有空,就基于 PHP 写了款很简单的短链,欢迎大家来指出 bug 。
PHP+MySQL+Nginx
http://qaq.cat
未来会加入更多域名的支持
例如输入长链接,随机返回短链而不是现在单一的 QAQ.cat
未来也会更加人性化自动补齐 http ,而不需要手动输入
未来很美好,愿我还能看到
7051 次点击
所在节点    分享创造
74 条回复
em70
2015-09-19 22:44:18 +08:00
不加 http://就不行
raincious
2015-09-19 23:32:24 +08:00
@GPU

哦,如果这样的话,得注意:你如果用`Alter`模式,用户在之前一个 Delay 周期结束之后再次点击按钮就可以继续提交了。而如果这期间你前面的 Callback 没有返回,那么那些之前的 Callback 是会被忽略掉的。

这样的话,如果 Callback 1 返回了一个成功的结果,而其后的 Callback 2 返回了一个失败的结果,那么这个模块会最终呼叫那个返回失败结果的 Callback 。

另外还要注意这个模块其实是用 setInterval 实现的。意味着如果你设定的 1 秒的 Delay ,那么用户按完按钮 1 秒以后你的 run 调用才会被执行。

如果你真要设定一秒那么长的超时的话,或许得给用户一个 Loading.gif 什么的假装服务器在处理。

请参考下具体代码来确定这个模块是否符合你的要求:

你或许会想看:`run`的实现:
https://github.com/raincious/jQueue/blob/master/src/jqu.js#L160

以及队列的运行方式:
https://github.com/raincious/jQueue/blob/master/src/jqu.js#L51

==========================

另外,你的需求为啥会导致 Callback 不叫?是服务器没有响应么?但如果你用了 jQuery 之类,它的 Ajax 里有个 timeout 设定的吧,除此之外基本上我想不出有啥会导致 Callback 不会呼叫的了(其实我不是前端……)。

要不你试试看用`Block`模式,然后$.ajax 带着超时限制去请求试试?
GPU
2015-09-20 00:27:12 +08:00
@raincious 你最后说的“ Callback 不叫” 不是太懂。

你应该是说为什么没有响应把? UART 是发了一个指令去蓝牙让单片机处理之后返回 1 或者 0 。

但是 过程中,蓝牙模块没有反映得这么快 ,所以如果有时候按了一次感觉没反应的话,就会狂按 。

结着 UART 模块就傻逼了, 不知道怎么处理就直接 500 出来了。

我也打算是点击按钮之后 ,显示一个 loading 的按钮。

但是 , 还没有了解过有没方法可以检测到只要一接收到结果,就恢复 按钮的使用


======

你发的哪两个链接我还看不懂呢 。

jquery 我也只是现学现用 ,懂一点皮毛呢
kslr
2015-09-20 10:48:44 +08:00
@GPU 你是怎么发请求的? ajax 不是有回调吗
GPU
2015-09-20 11:17:52 +08:00
@kslr 就是用 ajax , 是有回调 。但是如果结果还没有返回 ,再点按钮他回来会再发送一个 POST

https://gist.github.com/p0we7/c390f6c992e0a52ca955
raincious
2015-09-20 11:42:39 +08:00
@GPU

那么如果只是这样一个小功能,你可以在点完按钮之后 Disable 那个按钮,然后 success 、 error 、 always 几个 Callback 里让按钮 Re-enable 。

具体就是 `function POST (args ) {` 前面加上 `$('#Open').attr ('disabled', 'disabled');`

然后`success`、`error`,`always`这些回调里加上 `$('#Open').attr ('disabled', '');`

这样用户前端就不能再点击那个按钮了(如果它是个 HTML 按钮的话)。

如果你是自定义了一个其他 DOM 的按钮(比如拿图片做了个),可以在 `jQuery (document ).ready (function () {` 里设定一个变量(比如 var post_disabled ),然后通过判断这个变量来做类似的操作。
GPU
2015-09-20 11:51:12 +08:00
@raincious 我用的是 bootstrap ,这样子 Disable 也不错 ,我再去看看怎么添加一个 loading 图标
GPU
2015-09-20 11:54:11 +08:00
@raincious 我还发现一个问题啊 , 我刚刚试了一下你给的哪个 disable , 就是他是 disable 状态 ,但是继续点按钮还是会 post 数据,这个该怎么破
raincious
2015-09-20 12:04:24 +08:00
@GPU 其实……

你可以用<button>标签做按钮,就像比如:

<button type="button">
<i id="button-icon"></i>
Submit
</button>

然后,通过 jQuery 来改那个 `#button-icon` 的 class 。

See also: https://fortawesome.github.io/Font-Awesome/examples/#animated
raincious
2015-09-20 12:17:07 +08:00
@GPU

那我就是记错了,不过你可以试试看这样:
https://jsfiddle.net/33zz9njz/1/
GPU
2015-09-20 13:14:47 +08:00
@raincious

我一直都是用的 button , 用你给的那个 disable 使用了之后 ,虽然按钮是已经禁用了(灰色) .

而且鼠标放上去也是变成的红色圈禁止的符号,但是继续按它还是会 POST 数据出去 .

然而我有两个 按钮 ,一个 Open 一个 Close 的 . Close 的就不会 ,Open 的就会.不知道什么情况
raincious
2015-09-20 19:26:07 +08:00
@GPU

或许你需要提供更多的代码,这样才能进行测试。
GPU
2015-09-20 22:12:38 +08:00
@raincious

已经搞掂咯 .本身只想弄一个简单的点击之后禁用 ...

然后又找到了一个可以显示加载中动画的插件 然后添加了进去 ,默认就带有 加载中禁用的功能 .


谢谢啦 .
DeltaC
2015-09-21 11:33:01 +08:00
QAQA 。兹次。楼主的 jp 的 pac 好像挂了吧,请问是吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/221869

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX