【发布时间】:2016-05-13 05:49:42
【问题描述】:
我有一个应用程序,它在每个服务调用的响应中获取一个身份验证令牌,它应该发送前一个令牌作为下一次调用的参数,否则用户将未经授权。一旦令牌不匹配,所有其他调用都会失败。
为了确保令牌不匹配,我在屏幕上添加了加载器,并在启动 ajax 调用后立即显示它们,并在屏幕上保持加载覆盖,直到未收到响应,否则用户可以单击在任何其他会导致另一个 ajax 调用的链接上。
但是,我认为加载器机制容易出现漏洞。有没有办法检查是否有任何 ajax 调用正在进行中,然后将新的调用排队,排队的人将等待启动的响应,因为它需要从其响应返回的令牌作为其新的请求参数。
【问题讨论】:
-
让 ajax 请求立即执行,并将该请求的 Promise 存储在单例变量中,或者如果它看到单例被占用,则在之后执行其请求,这听起来似乎是合理的。您可能想知道,此系统中的任何请求超时都会使您处于非常不确定的状态,因为您的令牌可能已被服务器无效,也可能不会。不幸的是,在没有代码的情况下很难向您展示“如何”。您可能想至少尝试组合一个伪代码示例。
-
stackoverflow.com/questions/37098316/… 我之前发布了另一个查询,那里有我的 ajax 调用代码,当我实现它时,其他 ajax 调用的处理/排队将围绕它展开。
-
关于超时部分。如果一个请求超时,则将进行下一次调用,如果令牌在服务器端重新生成,则用户将因令牌错误而注销,否则将使用相同的旧令牌。我认为 tineout 将是一种罕见的情况,不会成为主要问题。对吗?
标签: javascript jquery ajax promise jquery-deferred