简单的作业/运行场景和参数,刷新等



我要完成的工作:

  1. 网页将显示可以运行的作业列表。现在他们将同步运行,我会担心稍后会异步。

  2. 当用户单击在作业上运行时,Lightbox将显示或所有运行按钮都会用消息和旋转器灰色,并指示该作业正在运行。该作业将通过AJAX呼叫启动,当Web请求返回时,将重置状态,并指示该作业已完成(成功或失败(。

  3. 我希望能够访问诸如/Jobs/Run/JobName/Jobs/JobName/Run之类的URL来运行工作。但是,我认为每个作业都需要单独的页面查看或运行作业,因为它非常适合列出所有作业,并且采取了与用户单击其中一个一样的操作。(在以后的情况下,可能会有工作加上运行作业列表,并且在一个页面上管理它们更有意义(。

但是,我有一些疑虑。

  • 如果我使用上述URL,则一旦作业完成并运行另一个作业,URL将与当前操作匹配(它可能显示/Jobs/Run/A,但会输入作业B(。因此,我认为,根据运行请求将重定向到/Jobs并将所需的作业注入Via JavaScript最有意义。

  • 如果直接在发射的HTML中直接使用注射的JavaScript值或代码段来导致作业运行,则用户将导航到另一个页面,然后按下返回按钮,不会运行JavaScript运行再次?这是不需要的。

  • 另外,除非是绝对必要的,否则我确实尝试避免使用会话,因为它如何引起问题,例如应用程序最终扩展到多个Web服务器,突然间,您必须提出一些分布式会话管理系统或完全停止使用会议,希望您首先没有这样做。因此

  • 我已经考虑过使用cookie(但是又有会话(。我已经考虑过在URL中使用HASH,例如/Jobs#Run/JobName,但这意味着添加解析/观察哈希或拉动JavaScript库的复杂性。哈希的优点是,一旦完成作业运行,该页面就可以删除哈希。(我还计划警告如果在工作仍在运行时单击刷新(不完整(,请重新运行工作。不是100%确定的(,所以也许这是一个答案。

最后,我现在正在重新考虑是否什至应该允许从GET请求中运行一份工作,因为工作可以更改数据状态,因此似乎也许不是最好的实践和我只允许帖子。在我获得工作经营的思考中,我只是吠叫错误的树吗?即便如此,我仍然存在围绕重新级后的一些问题并试图避免会议。

我敢肯定,前进的最佳途径非常明显,我只是错过了它。您建议什么?

这是我的快速分析:

首先,我根本不会重定向。重定向IMO创建程序流噩梦。在时间前,这是唯一的方法,但现在已经不复存在了。

我会在URL中使用哈希。有库,我找到了这篇文章:100行的现代JavaScript路由器。作者甚至在这里有一个GitHub项目:https://github.com/krasimir/navigo。这是几个优点:

  • 您在URL中有一个直接的可寻址操作。
  • 您可以更改无需往返服务器的操作。
  • 您的"动作"使用路由器触发地址哈希的变化。这意味着你只需要以一种方式处理这些动作。不管是用户通过URL或JavaScript触发操作页面上的funciton。

要处理用户向后导航的问题,您可以使用localStorage跟踪运行作业。通过这种方式,您将在完成工作之前不会重新启动。这也为不同步运行多个作业设定了阶段。

最后,如果您跟踪以某种方式在服务器上活跃的当前作业,则可以在初始页面加载下发送该列表;更新localStorage并立即做出决定。

最新更新