如何进行长轮询ajax请求并在返回结果后停止它

时间:2012-06-13 18:58:28

标签: jquery ajax django form-submit long-polling

我有一个网站(在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 /”的请求即使在我显示报告数据后也不会停止

我该如何使这项工作?我是否还需要改变后端的东西?

0 个答案:

没有答案