具有轮询周期的不同 ajax 调用
Different ajax calls with polling cycle
假设第一个 ajax 调用是立即进行的,控制器调用的函数循环直到读取某些内容,例如:
def FirstAjax():
while True:
if something is read:
val = something
break
return val
在读取某些内容之前,用户按下"返回"按钮并发送一个新的 ajax 请求,例如:
def SecondAjax():
print "Response from second ajax"
第二个 ajax 调用确实被调用(显然,我们谈论的是异步的东西:)),但在 FirstAjax 循环完全完成之前不会打印文本。
我希望第二个请求告诉python停止第一个请求的操作,但不知道如何完成!
使用芹菜。
过程如下:
-
提出
FirstAjax
请求。Python 使用芹菜对任务进行排队。您可以让任务立即启动,也可以在几分钟/几小时/几天内启动。FirstAjax 发回所创建任务的 id,而任务本身则排队等待在后台执行。使用芹菜任务 ID -
进行
SecondAjax
,随任务 ID 一起发送。使用该任务 ID 取消任务。如何取消芹菜任务。
第二个 Ajax 请求可能会被阻止,直到第一个请求完成,因为会话文件可能被锁定。假设第一个 Ajax 请求不需要使用该会话,您可以让它解锁会话:
def FirstAjax():
session.forget(response) # unlock the session file
[rest of code]
有关更多详细信息,请参阅此处。
问题解决了,这是一个特定的web2py问题。
def FirstAjax():
session.forget(response) # unlock the session file
[rest of code]
讨论web2py不锁定会话文件,以便第二个ajax可以立即启动。另一种方法是设置:
session.connect(request, response, db)
在模型中,这意味着会话不会保存在文件中,而是保存在 DAL "db" 中,因此会话不会被锁定。
这两种解决方案对于我需要的是相同的。
就我而言,我还需要在按下后退按钮时进行设备释放,只需添加一个要在轮询周期中检查的标志,例如:
def FirstAjax():
session.forget(response) # unlock the session file
HSCAN.SetLeave(False)
HSCAN.PollingCycle()
#Rest of code
def SecondAjax():
HSCAN.SetLeave(True)
#Rest of code
class myHandScanner():
def __init__(self):
self.leave = False
def SetLeave(self, leave):
self.leave = leave
def PollingCycle(self):
while True:
if self.leave:
#Do device release
return
if something is read:
val = something
break
#Do device release
return val
谢谢大家,希望这有帮助!
相关文章:
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Javascript/jQuery中的并行Ajax调用
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- node.js请求数据事件未在CORS ajax调用中触发
- 如何从ajax调用返回.wrap()元素
- Ajax调用在Firefox中不会自动响应
- AJAX调用中的非法调用
- 使用AJAX调用将GeoJSON数据拉入传单
- 在MVC 4中,对Controller的Ajax调用为空
- Jquery:对返回JSON数据的php脚本的Ajax调用
- 在ajax调用中阻止来自JS对象的函数
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- 页面加载后的Ajax调用
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- curl和fileget_contents在ajax调用后不起作用
- 在任何AJAX调用之前触发一个javascript函数
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- Ajax调用ERror Cross Origin REquest:在rails中自动完成大学列表
- ASP.NET MVC 3-在ajax调用后,重定向到新页面或生成页面刷新
- 点击功能没有'ajax调用动态元素(Backbone)后无法工作