2011-06-30 191 views
4

我有一個jquery moblie前端運行的網站與Django。我有一個用例可能需要很長時間才能完成,所以我希望用戶看到它的進展情況;在我的例子中,這是一系列事件,它們是否成功/失敗。jquery移動和動態頁面內容

在後臺我有一個generator對象,吐出這個信息。它圍繞着一個HttpResponse對象,以充實更新的流式方面。一個簡單的網頁(只是HTML和身體標籤)表明,它按預期工作。但是,jquery mobile(至少默認情況下)喜歡在顯示它之前加載整個頁面。

我不介意將此輸出顯示爲對話框。

有什麼想法?

回答

0

只是爲了更新我對此的體驗。

所以最後我花了我大部分時間用jquery mobile抓我的腦袋。當然,如果我事先做了rtfm'd,我可能會有一個更小的頭痛!基本上ajax頁面更新只是簡單的煩人,所以這裏最重要的是在我的html form上使用rel="external"data-ajax="false"來禁用它們 - 並且,由於#的使用方式,您還需要將這些標記添加到任何頁面加載此頁面也(否則多頁將無法正常工作)。

然後我創建了一個多頁的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> 
    

0

您可以使用通常的AJAX請求輪詢Django進度更新。

它不能解決jquery移動和長輪詢問題,但它爲您提供了靈活性,使您將長期運行的任務從前端轉移到後端(例如使用Celery)。

爲了保持性能,我建議將狀態從長時間運行的任務更新到memcached實例。

在你的視圖中,只需獲取進度並返回即會觸發對話框或更新某個div的進度。更好 - 只是結果。