<script>
var status = {{ check_status }};
call_polling = function() {
// polling request to API (async)
success:function(result){
status = result.check_status;
}
}
if(status) {
var timer = setInterval(function() { call_polling(); }, 2000);
}
else{
clearInterval(function(){ call_polling();});
}
</script>
所以,我有一个带有Async请求的代码来查看后端进程的状态。所以,首先我将status
设置为1(即通过Django中的上下文检查check_status)。因此,如果status
为1,那么var timer
行将每2秒开始调用call_polling()
函数
因此,call_polling()
会查询API以检查状态,并检查{'check_status': 1}
成功的响应,它会转移status = 1
。指示后端进程仍在运行。一旦后端进程完成,我将JSON响应传递为{'check_status' : 0}
应该是status=0
,然后它不会进入if
,而是清除轮询间隔(因为我们知道后台处理已经完成)并且异步调用API应该停止。
但它不起作用,并且javascript仍然每2秒对API请求进行一次call_polling()。我找出原因var status
全局声明为1
,即使我替换status = result.check_status
。在函数上下文之后,它将始终保持为1并且仅进入if循环;无论从JSON响应中收到什么。
所以,问题是如果status
为0,我将如何更新result.check_status
并清除超时(即转到else部分)(即{'check_status':2}作为响应来自API调用)??
答案 0 :(得分:1)
以下是如何做到这一点:
var status = {{ check_status }};
function call_polling() {
// polling request to API (async)
success: function (result){
status = result.check_status;
if (status) setTimeout(call_polling, 2000);
}
}
call_polling();
简而言之,只要响应为1
,就会设置新的检查超时。