【问题标题】:Barcode web site interaction条码网站交互
【发布时间】:2011-04-27 19:54:42
【问题描述】:

我正在设计一个 Web 应用程序,并且正在考虑结合一些条形码读取功能以方便数据输入。假设我有一个快递员需要完成的任务列表。我想打印类似于以下页面的内容:

+----------------------------------------------------------------------+
| Task List                                   || || |||| || || ||| (a) |
|                                                                      |
| Task One                                    ||| || |||||| || ||| (b) |
| Task Two                                    ||| || || | | || ||| (c) |
| Task Three                                  | |||||| || ||| |||| (d) |
|                                                                      |
|                                             ||||| |||| || || ||| (e) |
+----------------------------------------------------------------------+

条形码由每行末尾的||||| | ||| || (x) 表示。使用条形码 servlet 作为烧烤应该直接打印页面。我想有一种通用的方法来拦截这些条形码并在 jQuery 中做一些事情。例如:

  • 条形码(a)可以是goto:/tasklist/123:
  • 条形码 (b)、(c) 和 (d) 可以是 add:31222:add:31223add:31224:
  • 条形码(e)可以是submit::

扫描条形码时(a)我会去那个页面。扫描条形码 (b)、(c)、(d) 时,我会在页面中填充文本输入。扫描条形码(e)时,我会提交表格。我正在考虑在每个页面上都可以使用某种形式的 jQuery 侦听器,我可以根据条形码的第一个命令向其注册操作。我知道我可以对条码设备进行编程以包含一些逻辑,但我想避免它,这样任何条码都可以,我不必处理它们的编程。

我什至认为每个条形码可能都必须以一些魔术符号开头,以区分常规输入和条形码输入。也许像$**$:goto:/tasklist/123: 这样的东西。那么问题是我将如何使用 jQuery 来拦截这组命令,以及为我创建的不同操作注册处理程序的正确方法是什么(例如:$**$:add:31222:)?

【问题讨论】:

  • “使用条形码 servlet 作为烧烤应该直接打印页面” - 嗯? :-P
  • 大多数(如果不是全部)条码扫描器的工作方式几乎与 USB 数字键盘一样。他们扫描条形码,然后像键盘一样“输入”数字 - 所以网页并不需要特殊的软件来接收来自条形码扫描仪的输入。
  • 我最感兴趣的是搞清楚 javascript 方面。

标签: jquery barcode barcode-scanner


【解决方案1】:

我做过类似的申请,所以这是我的两分钱。

USB 扫描仪基本上像 USB 键盘一样工作。大多数将发送一个回车键作为终止字符,但这可以在大多数设备上进行配置。我依靠终止字符来驱动我的 UI 中的操作。 (Enter 默认会提交当前选中的表单。)

另一个问题是,如果这是一个移动应用程序,您真的希望尽可能避免往返服务器。我通过在 UI 中使用大量应用程序逻辑解决了这个问题,但是所有业务逻辑仍在服务器上,因此要使操作生效,用户需要连接并能够 POST 到服务器。

所以,你的问题的核心。考虑这样的事情:

var state = 'WAITING'; # super simple state

function add(data) {
    # courier checks an item, 'data' contains the data from the scanner
}

function input_handler(input) {
    if (state == 'WAITING') {
        if (input == 'DONE' || input == 'EXIT') {
            state = 'DONE';
            # abort, whatnot
        } else {
            state = 'SCAN';
            input_handler(input); # recurse, with new state
        }
    } else {
        add(input);
    }
}

这基本上是一个状态机,手动编码。当快递员检查“我要开始扫描此订单”条码时,您会进入一种模式,其中每个输入都会发送到您的扫描处理程序。当他扫描“我完成了”-条形码时,您可以验证结果等。这可以通过实际使用真实状态机来改进。

您应该使条形码尽可能简单。 'SCAN'、'EXIT'、'NOTHING_MORE_TO_SCAN' 之类的命令很好,因为它们是通用的,您的应用程序不需要解析条形码的含义。

让它们保持简单的另一个原因是,您遇到标签已损坏且无法扫描的情况。然后用户必须能够手动输入数据,而无需花费额外的时间查找特殊字符等。

【讨论】:

    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2012-11-08
    • 2015-06-09
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    相关资源
    最近更新 更多