2012-11-08 28 views
1

我使用tabletop將我的jQuery Mobile應用程序的文本/內容存儲在Google文檔中,因此當有人訪問我的應用程序時,它應該執行的第一件事是獲取內容(JSONP請求)。爲我的jQuery Mobile首頁獲取內容的最快方式是什麼?

假設jQuery Mobile在JSONP請求完成之前加載/呈現(這不一定是這種情況),它應該顯示一個加載指示器,直到請求完成,然後請求回調將呈現數據,它會需要觸發重新渲染來增強諸如<ul>元素之類的內容。

我該如何做到這一點,以便與jQuery Mobile加載/渲染時間線?

我正在考慮在<head>(不是在一個事件中)內部執行JSONP請求,並在完成時將數據呈現到內容<div>,但我需要觸發重新渲染,並且如果我觸發在jQuery Mobile呈現之前,它會中斷,等等。

如果沒有意義,這裏有一個更相關的例子:假設你想讓你的首頁顯示特定帳戶上最近的推文。當您加載頁面時,它會提取推文。你如何計時,所以當抓取完成時,它可以正確渲染?

+0

爲什麼不把「重新呈現」放入JSONP請求的回調? – Marcus

+0

@G_M,因爲如果回調是在頁面呈現之前觸發的呢?在第一次創建頁面之前,您不能調用.trigger(「創建」),否則會出現錯誤。 –

回答

1

您可以綁定到pageinit事件以發出您的AJAX請求。這可以確保在AJAX請求返回時,jQuery Mobile僞頁面將被初始化。這很好,因爲那時你知道你動態添加的代碼的狀態,它沒有被初始化。

例如:

$(document).on('pageinit', '#myLandingPage', function() { 
    $.ajax({ 
     ..., 
     success : function (response) { 
      //do your work on the response 

      //then when you add the HTML output to the DOM just initialize it 
      $("#some-container").html(htmlOutput).trigger("create"); 
     } 
    }); 
}); 

我想建議你做一個服務器端語言的初始JSONP請求,因爲您的服務器最有可能有真正良好的帶寬和用戶不得(特別是如果他們'在移動設備上)。

+0

這會起作用,但我將失去在文檔加載和調用'pageinit'事件之間的時間。這不是什麼大不了的事情,但如果我能儘快開始HTTP請求,那會很好。 –

+0

@TobiasFünke您可以更新AJAX請求的回調函數,首先檢查頁面的狀態,無論它是否已經初始化,然後初始化或更新它。 jQuery Mobile在初始化時向許多元素添加類,因此您可以通過檢查其中一個類來檢查頁面是否已被初始化,如:if($(「#my-page-div」)。hasClass( 「ui-page」)){/ *已經初始化* /} else {/ *尚未初始化* /}'。雖然我不確定多久可以顯示加載微調器。 – Jasper

+0

謝謝賈斯珀,這正是我所做的,它的工作。我在事件之外執行它,所以它會立即加載,並且在''中添加'ui-loading'類,並在完成時刪除它 –

相關問題