经过一个晚上的浏览和尝试,我有一些工作,但我想知道这是否都是正确的,或者可以改进。我问,因为我不经常使用 javascript 或 jquery/ajax....
在 django 应用程序中,我有一个 celery 任务正在运行,我想在任务完成后用结果更新浏览器。
为此,我使用 setTimeout 创建了一个 javascript 计时器(因此我可以在成功时停止它)。
现在我希望能够支持多个计时器;我要更新的每个字段(或任务)一个;我不确定如何在匿名函数上设置新的超时,所以我给它起了一个名字并使它成为全局的;那是对的吗?有没有更好的方法来做到这一点?
保罗·博尔曼斯
{% block jscript %}
<script>
function updateTaskResult(i, e) {
$.ajax({
type: "GET",
url: "{% url 'task_status' %}",
cache: false,
data: {task_id: e.id},
context: e
}).done(function(json) {
$(e).html("state=" + json.state + " result=" + json.result);
if(json.state !== "{{ success }}") {
setTimeout(updateTaskResult, 1000, i, e);
}
});
}
$("div.status").each(function(i, e) {
updateTaskResult(i,e);
});
</script>
{% endblock %}