我有一个jquery moblie前端到一个运行django的网站。我有一个用例,可能需要很长时间才能完成,所以我希望用户看到它的进展;在我的例子中,它是一系列事件以及它们是否成功。
在后端我有一个generator
对象,它会吐出这些信息。它包裹在HttpResponse
对象周围,以便完整更新流的方面。一个简单的网页(只是html和body标签)表明它按预期工作。
然而,jquery mobile(至少在默认情况下)喜欢在显示之前加载整个页面。
我不介意将此输出显示为对话框。
任何想法?
答案 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,瞧!有用!表单提交中的流式传输结果显示应该显示。
总结一下:
创建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>