如何从函数内部(轮询)更新成功事件的全局变量?
How to update global variable on a successful event from inside a function (polling)?
<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>
所以,我有一个带有异步请求的代码来查看后端进程的状态。因此,首先我将 status
设置为 1(即 check_status 通过 Django 中的上下文)。因此,如果 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 秒使 call_polling() 到 API 请求。我想通了 var status
全局声明为 1
的原因,即使我替换 status = result.check_status
也是如此。在函数上下文之后,它将始终保持为 1 并仅进入 if 循环;无论它从 JSON 响应中收到什么。
所以,问题是如果 result.check_status
为 0(即 {'check_status': 2} 作为来自 API 电话的响应)??
操作方法如下:
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
,就设置了新的检查超时。
<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>
所以,我有一个带有异步请求的代码来查看后端进程的状态。因此,首先我将 status
设置为 1(即 check_status 通过 Django 中的上下文)。因此,如果 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 秒使 call_polling() 到 API 请求。我想通了 var status
全局声明为 1
的原因,即使我替换 status = result.check_status
也是如此。在函数上下文之后,它将始终保持为 1 并仅进入 if 循环;无论它从 JSON 响应中收到什么。
所以,问题是如果 result.check_status
为 0(即 {'check_status': 2} 作为来自 API 电话的响应)??
操作方法如下:
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
,就设置了新的检查超时。