同时进行AJAX调用以分离Django视图
我有一个Django视图,它在收到POST请求时运行特定的函数 片段:同时进行AJAX调用以分离Django视图,ajax,django,Ajax,Django,我有一个Django视图,它在收到POST请求时运行特定的函数 片段: def run_function(request): if request.method == 'POST': run_some_function() def get_progress(request): progress = calculate_progress() return HttpResponse(json.dumps(progress), content_type="ap
def run_function(request):
if request.method == 'POST':
run_some_function()
def get_progress(request):
progress = calculate_progress()
return HttpResponse(json.dumps(progress), content_type="application/json")
这是通过AJAX调用的,如下所示:
$.ajax({
'type' : 'POST',
'url' : '/run_function/',
'data' : data,
'success' : function(json) {
// Display results to user
}
});
这正如预期的那样有效。但是,这个特定的函数可能需要一段时间才能运行,因此我想向用户显示进度信息
幸运的是,我有另一个函数可以返回任务的进度(0-100之间的整数)
片段:
def run_function(request):
if request.method == 'POST':
run_some_function()
def get_progress(request):
progress = calculate_progress()
return HttpResponse(json.dumps(progress), content_type="application/json")
然后,我可以每X秒进行一次AJAX调用,以获取进度并更新我的进度条:
function check_progress() {
$.ajax({
'type' : 'POST',
'url' : '/get_progress/',
'success' : function(response) {
if (response >= 100) {
// Update progress bar to 100% and clearInterval
} else {
// Update the progress bar based on the value returned by get_progress
}
}
});
}
var check = setInterval(check_progress, 500);
问题是…我怎么能同时做这两件事?我需要能够进行AJAX调用以运行函数,同时进行AJAX调用以监控进度
对于如何做到这一点,有什么建议吗?或者是比两次AJAX调用更好的设计
谢谢你的帮助 AJAX中的A代表异步。你不需要做任何特别的事情。如果您已整理好视图和进度,则只需执行以下操作:
$.ajax({
'type' : 'POST',
'url' : '/run_function/',
'data' : data,
'success' : function(json) {
// Display results to user
}
});
var check = setInterval(check_progress, 500);
AJAX中的A代表异步。你不需要做任何特别的事情。如果您已整理好视图和进度,则只需执行以下操作:
$.ajax({
'type' : 'POST',
'url' : '/run_function/',
'data' : data,
'success' : function(json) {
// Display results to user
}
});
var check = setInterval(check_progress, 500);
只进行一次ajax调用,让处理视图调用任意多个附加视图。@w这是一个有趣的想法,但是我如何将数据从视图传递回JavaScript呢?假设我启动一个新进程来运行函数。然后,当它运行时,我让视图调用另一个返回HTTPResponse的视图。它是否会将其返回到调用视图?在这个设计中,我不知道如何在函数运行时动态地更新JS端。然后重构代码并将公共代码放入python模块中。进行一次ajax调用,让处理视图调用任意多个附加视图。@w这是一个有趣的想法,但我如何将数据从视图传递回JavaScript?假设我启动一个新进程来运行函数。然后,当它运行时,我让视图调用另一个返回HTTPResponse的视图。它是否会将其返回到调用视图?在这个设计中,我不知道如何在函数运行时动态地更新JS端。然后重构您的代码并将普通代码放入python模块中。谢谢!我确实读过很多浏览器限制您同时运行两个AJAX请求,但现在我只需要这些。是的,这与一次运行两个以上的请求非常不同。谢谢!我确实读过很多浏览器限制您同时运行两个AJAX请求,但现在我只需要这些。是的,这与一次运行两个以上的请求非常不同。