2013-02-01 31 views
4

我對從一個JQM/Phonegap應用程序頁面之間傳遞數據有疑問。Phonegap - 在頁面之間傳遞JS數據

如果我有一個JS對象,其中包含以下一些數據:搜索項,位置和一些其他過濾器值,例如用戶正在從搜索頁面跳轉到設置頁面,並再次返回到搜索頁面。 ..我怎樣才能保存信息,我在預覽頁面中有什麼?有沒有類似cookie的內容,或者我是否曾經使用過sqlite來保存信息並在用戶每次進入搜索頁面時閱讀它?

回答

12

我會用LocalStorage,使用起來相當簡單。它允許你存儲明文:

// Writing 'something' in localStorage.myvariable 
localStorage.myvariable = 'something' 

// Displaying the previous variable 
console.log(localStorage.myvariable) 

如果純文本是不夠的,你需要存儲的數據結構,你可以實現類似:

Storage.prototype.setObject = function(key, value) { this.setItem(key, JSON.stringify(value)); } 
Storage.prototype.getObject = function(key) { var value = this.getItem(key);return value && JSON.parse(value); } 

// Storing a JSON object 
localStorage.setObject('myObject', {key1: 'value', key2: 'value2'}); 

// Accessing the object 
localStorage.getObject('myObject') 
+0

localStorage是否適用於iOS和Android?我已經閱讀過某個地方,Android有一些問題? –

+1

您可以同時使用它,它是一個與所有iOS和Android版本兼容的HTML5功能(http://caniuse.com/namevalue-storage) – davids

+0

localStorage的不足之處在於它用於存儲字符串,而不是對象。所以你需要存儲一個序列化的對象(YMMV)或單獨存儲對象的屬性。 – YiddishNinja

1

我認爲一種可能的方法是使用querystrings在頁面之間來回發送數據,你可以將它們附加到頁面url。比如newpage.html?val = 12,如果你需要傳遞的數據量不多,這個方法會更好,並且與sqlite相比輕量級。你也可以使用localstorage,它是關鍵值對(與關係型sqlite不同)。它比sqlite實現起來要容易得多(雖然它不是持久的)。

此外,如果您真的需要多個html頁面,像jquery mobile和sencha touch這樣的框架可以很好地處理一個帶有多個div的html頁面作爲應用程序的屏幕,您可能需要重新考慮。所以你可以嘗試一下。

+0

我已經使用了這種方法,因爲我只有1或2個項目可以通過。你可以通過#標籤傳遞它,然後用JS分割結果到數組中... – jasonflaherty

1

我用這個方法包括hashtag( 2014現在),因爲我只有1或2件物品可以通過。您可以通過#標籤通過它,然後用JS的結果分成和數組...例如:

從網址:index.html的#VAR1 VAR2

解決頁:

var str = str.window.location.hash.substr(1); 
var res = str.split("?"); 
alert(res[0]+","+res[1]); 

希望能幫助別人。 LocalStorage和其他選項對於這種IMO提升來說太重了。