jquery移动和动态页面内容

时间:2011-06-30 00:39:55

标签: django stream jquery-mobile

我有一个jquery moblie前端到一个运行django的网站。我有一个用例,可能需要很长时间才能完成,所以我希望用户看到它的进展;在我的例子中,它是一系列事件以及它们是否成功。

在后端我有一个generator对象,它会吐出这些信息。它包裹在HttpResponse对象周围,以便完整更新流的方面。一个简单的网页(只是html和body标签)表明它按预期工作。

然而,jquery mobile(至少在默认情况下)喜欢在显示之前加载整个页面。

我不介意将此输出显示为对话框。

任何想法?

2 个答案:

答案 0 :(得分:0)

您可以使用常规的AJAX请求轮询Django以获取进度更新。

它不能解决jquery移动和长轮询问题,但它为您提供了将长时间运行的任务从前端扩展到后端(例如使用Celery)所需的灵活性。

为了保持性能,我建议将状态从长时间运行的任务更新到memcached实例。

在您的视图中,只需获取进度并返回,即将触发对话框或更新某个div。更好 - 只是结果。

答案 1 :(得分:0)

只是为了更新我对此的体验。

所以最后我花了大部分时间用jquery mobile摸不着头脑。当然,如果我事先得到rtfm,我可能会有一个更小的头痛!基本上ajax页面更新只是简单烦人,所以重要的是在我的html rel="external"上使用data-ajax="false"form禁用它们 - 并且,因为#的方式使用时,您还需要将这些标记添加到任何加载此页面的页面(否则多页将无法正常工作)。

然后我创建了一个多页jqm页面,并通过我的提交按钮(在我的情况下使用data-rel="dialog")链接到它,第二页空白iframe;我将表单target设置为此iframe,瞧!有用!表单提交中的流式传输结果显示应该显示。

总结一下:

    返回
  • django HttpResponse,其参数是生成器对象。这样就可以实现输出的流媒体特性。
  • 创建jqm页面:

                                

    <div id="main" data-role="page">
      <div data-role="content">
        <form id="myform" method="post" target="response-iframe" action="***django generator page***" data-ajax="false">
          ...
          <a id="submit-button" href="#secondary" data-rel="dialog" data-role="button" data-theme="e">Submit</a>
          <script>
          $('#submit-button').live( 'click', function(){
              $('#port-form').submit()
            })
          </script>
        </form>
      </div>
    </div>
    
    <div id="secondary" data-role="page">
      <div data-role="content">
        <iframe id="response-iframe"></iframe>
      </div>
    </div>