我有一个网站(在 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;
});
这在我的开发机器和生产环境中运行良好,直到数据量增加。
现在,我想包括一个长轮询方法来解决这个问题。我按照此链接上的说明进行操作,但没有按预期工作。
我的代码如下所示:
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 触发对服务器的请求,不考虑 30 秒超时(据我从上面的链接了解,它应该每 30 秒触发一个新请求,而不是更少)。2)这并不能解决真正的问题 3)在我的开发服务器中,即使是第一个代码也可以工作,即使在我获得要显示的报告数据后,对“/report/long-polling/”的请求也不会停止
我怎样才能使这项工作?我是否也需要更改后端的内容?