我有一个网站(在django中)向用户显示一个报告,该报告是数据库查询和一些后期处理工作的结果。
这需要超过30秒并且正在触发超时(我无法更改超时数,因为我正在使用Heroku)。
我想到的唯一可能的解决方案是使用长轮询方法。 现在,我在提交按钮上发出ajax请求,如下所示:
var options = {
dataType: 'json',
url: '/report/url/',
error: custom_error,
success: show_report,
};
$('#report_form').submit(function() {
// submit the form
$(this).ajaxSubmit(options);
// return false to prevent normal browser submit and page navigation
return false;
});
这在我的开发机器和生产中运行良好,直到数据量增加。
现在,我想包括一个长轮询方法来解决这个问题。 我按照link上的说明进行操作,但它没有按预期工作。
我的代码如下所示:
var options = {
dataType: 'json',
url: '/report/url/',
error: custom_error,
success: show_report,
complete: poll
};
$('#report_form').submit(function() {
$(this).ajaxSubmit(options);
return false;
});
function poll(){
$.ajax({ url: "/report/long-polling/", success: show_report, dataType: "json", complete: poll, timeout: 30000 });
};
我创建了一个url(“/ report / long-polling /”),它不会返回任何重要信息,只是为了保持连接打开。
这不起作用。以下是发生的事情: 1)在表单提交之后,新的$ .ajax触发对服务器的请求,不遵守30s超时(据我所知,从上面的链接它应该每30秒触发一个新请求,而不是更少)。 2)这不是解决实际问题 3)在我的开发服务器中,即使第一个代码工作,“/ report / long-polling /”的请求即使在我显示报告数据后也不会停止
我该如何使这项工作?我是否还需要改变后端的东西?