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

时间:2017-04-21 19:17:55

标签: javascript asp.net-mvc-5

我想要完成的事情:

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

  2. 当用户点击作业上的运行时,灯箱将显示或所有运行按钮将灰显,并显示消息和指示作业正在运行的微调器。该作业将通过ajax调用启动,当Web请求返回时,状态将被重置,并且将显示作业已完成(成功或失败)的指示。

  3. 我希望能够访问/Jobs/Run/JobName/Jobs/JobName/Run等网址来运行作业。但是,我不认为每个作业需要一个单独的页面来查看或运行作业,因为它非常适合列出所有作业并执行与用户相同的操作点击了其中一个。 (在未来的情况下,可能会有作业加上正在运行的作业列表,并且在一个页面上管理它们更有意义。)

  4. 但是,我有一些疑虑。

    • 如果我使用上面这样的网址,那么一旦作业完成并且您运行了另一个作业,该网址就不会与当前操作相匹配(它可能会显示/Jobs/Run/A但会运行作业B代替)。因此,我认为在运行请求中,最有意义的是,重定向到/Jobs并通过javascript注入所需的作业。

    • 如果我只是在发出的HTML中直接使用注入的javascript值或代码片段来导致作业运行,那么用户导航到另一个页面,然后按下后退按钮,赢得了javascript再次运行?这是不可取的。

    • 此外,我确实尝试避免使用会话,除非它是绝对必要的,因为它会导致诸如应用程序最终扩展到多个Web服务器等问题时突然出现问题使用一些分布式会话管理系统或完全停止使用会话,并希望您首先没有这样做。那么是否有另一种方法可以在运行URL和非运行URL之间实现Get-Redirect-Get?

    • 我考虑过使用过Cookie(但会议中又有了会议)。我考虑在URL中使用哈希,例如/Jobs#Run/JobName,但这意味着增加了解析/观看哈希或拉入javascript库的复杂性。哈希的优点是,一旦作业完成运行,页面就可以删除哈希。 (如果在作业仍在运行时点击刷新,我还计划警告重新运行作业,不完整。)但是,页面也可以更改URL而不会触发浏览器实际加载任何内容(对吗?我&#39 ;这不是100%肯定的,所以也许这是一个答案。

    最后,我现在正在重新考虑是否应该允许从GET请求运行作业,因为作业可以更改数据状态,因此似乎可能不是最好的练习,我应该只允许POST。在我的GET职业运行思维中,我现在只是咆哮着错误的树吗?即便如此,我仍然会在Post-Redirect-Get和试图避开会话时遇到一些相同的问题。

    我确信最好的前进道路是非常明显的,我只是错过了它。你有什么建议?

1 个答案:

答案 0 :(得分:0)

这是我的快速分析:

首先,我根本不会做重定向。重定向IMO创建程序流噩梦。在不久前,这是唯一的方式,但不再是。

我会在网址中使用哈希。有图书馆,我找到了这篇文章:A modern JavaScript router in 100 lines。作者甚至在这里有一个GitHub项目:https://github.com/krasimir/navigo。这有几个好处:

  • 您可以在网址中找到直接可寻址的操作。
  • 你可以改变 没有往返服务器的行动。
  • 你的“行动”使用了 路由器触发地址哈希值的更改。这意味着你 只需要以一种方式处理这些行为。如果是的话没关系 用户通过URL或通过javascript触发了操作 页面上的功能。

要解决用户向后导航的问题,您可以使用localStorage来跟踪正在运行的作业。这样,在完成作业之前,您不会重新启动作业。这也为异步运行多个作业奠定了基础。

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