3

我有一个网站(在 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/”的请求也不会停止

我怎样才能使这项工作?我是否也需要更改后端的内容?

4

0 回答 0