2012-05-24 66 views
2

如何在兩個jQueryMobile頁面之間傳遞類似用戶名的變量?如何在jQM頁面之間存儲變量?

或兩個常規頁面,變量作爲全局不起作用,因爲在下一個包含它將設置變量回到空。

如何在兩個html頁面之間傳遞一個變量全局變量?

+0

您可以使用cookie。 –

+0

我以爲jQuery Mobile是關於單頁面應用程序的。 – Pointy

+2

@Pointy JQM提取外部頁面並將其附加到DOM,但可用於多頁面應用程序http://jquerymobile.com/demos/1.1.0/docs/pages/page-anatomy。html – Jack

回答

6

我通常與本地存儲去,你可以存儲對象太紐帶。例如:

var userInfo = { 
      "username": "Bob", 
      "roleName": "Admin", 
      "image": "img/userPic.jpg", 
     }; 

     //Store the object in local storage 
     localStorage.setItem('loggedUser', JSON.stringify(userInfo)); 

那麼其他頁面上,你可以簡單地做:

var userInfo = JSON.parse(localStorage.getItem("loggedUser")); 
var userName = userInfo.username; 
+0

我在考慮使用localStorage,我想避免查找localStorage,因爲我將不得不使用相同的數據很多次。我想知道appcache是​​否有一個機制來存儲變量,因爲應用程序需要脫機工作... localStorage可能是更簡單的解決方案。謝謝。 – Astronaut

1

只要您在兩個頁面之間的超鏈接上禁用了Ajax,就可以將它傳遞給查詢字符串。

<a href="nextPage.php?username=joe" data-ajax="false">Next page</a> 

您錯過了jQuery移動轉換的有益特性,但至少可以成功地在頁面之間傳遞變量。

更新:

the documentation

傳遞頁面之間參數:

jQuery Mobile的不支持查詢參數傳遞給內部/嵌入式網頁...

文檔然後繼續建議兩個插件,我還沒有嘗試過。 Page params pluginjquery mobile routing plugin

請務必查看上面鏈接的文檔頁面,以解釋爲什麼傳遞參數不應該工作,但如果您在沒有散列的情況下加載頁面(通過禁用ajax行爲),那麼您應該沒問題 - 至少在我的經驗中。

+0

在同一頁面中,它們共享相同的上下文,因此這裏沒有問題。只有我需要訪問用戶ID才能執行對websql數據庫的查詢,問題就變得很明顯。我試圖查看文檔。謝謝。 – Astronaut

+0

@AdamSurfari;我不確定你是什麼意思;我的回答(開頭)是指將用戶名傳遞給第二頁。我可能是錯的,但我將文檔解釋爲意味着所有網站頁面都是「內部」的,而不同服務器上的所有內容都是「外部」的。因此,通過關閉默認行爲('data-ajax =「false」'),您可以將參數傳遞到第二頁。否則,第二個「內部」頁面將使用特殊的jquery移動框架加載,其中查詢參數可能會在所描述的方法中丟失。 – veeTrain

1

您可以通過查詢字符串或客戶端路由使用URL,您可以使用localStorage(假設它們位於同一個域中),也可以使用cookie。

如果你決定使用客戶端路由存在於JQM在專門的插頭與不同的JQM頁面事件

https://github.com/azicchetti/jquerymobile-router

+0

感謝您看到有趣的鏈接。 – Astronaut

0

您可以存儲全局變量使用相同的方法JQM存儲自己的配置。在「mobileinit」下$。移動剛剛創建自己的JavaScript對象,並用它爲你的全局變量:

<!DOCTYPE html> 
    <html> 
    <head> 

     ... 

     <script> //position before jqery.mobile.js is important for 'mobileinit' to fire 
      $(document).on("mobileinit", function(event) { 

       //create global variable storage 
       $.mobile.YourApplicationNameHere = {}; 

       //use it like this anywhere in your code: 
       $.mobile.YourApplicationNameHere.globalVar1 = 1; 
       $.mobile.YourApplicationNameHere.globalVar2 = 2; 
       console.log("globalVar1 = " + $.mobile.YourApplicationNameHere.globalVar1); 

      }); 
     </script> 

     <script src="jquery/jquery.mobile-1.4.5.min.js"></script> 

     ... 

    </head> 
     ... 
    </html> 

您可以在任何地方初始化的全局變量,但「mobileinit」是JQM的最早的初始點。