2012-03-23 55 views
0

好的,我有邏輯,但不確定如何寫入cookie中由管道分隔的特定位置,|獲取並設置數組位置的cookie值

例如 - 採取一個cookie與0 | 0 | 0 | 0

如果全局變量被設置爲Y,然後寫入值c和d的第二&第三位置(假設陣列)如果cookie存在 - 如果cookie不存在,則創建一個含0 | 0 | c | d的cookie 0

如果全局變量爲null,則將值a和b寫入0和第一個位置(如果cookie存在) - if該cookie不存在,然後創建一個cookie與| b | 0 | 0

我知道得到一個cookie,並分裂cookie來獲得一個值,但聯合國確定如何寫入特定位置。我假設使用「加入」。

function createCookie(name,value,days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     var expires = "; expires="+date.toGMTString(); 
    } 
    else var expires = ""; 
    document.cookie = name+"="+value+expires+"; path=/"; 
} 

function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1,c.length); 
     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
    } 
    return null; 
} 

function eraseCookie(name) { 
    createCookie(name,"",-1); 
} 

回答

1

假設你想要的cookie值被評爲"pipes"和你的變量命名爲globalVar,你可以做這樣的事情:

var val = readCookie("pipes") || ""; 
var valArray = val.split("|"); 
if (valArray.length >= 4) { 
    if (globalVar == "Y") { 
     valArray[2] = 'c'; 
     valArray[3] = 'd'; 
    } else if (globalVar == null) { 
     valArray[0] = 'a'; 
     valArray[1] = 'b'; 
    } 
    val = valArray.join("|"); 
} else { 
    // fully formed cookie value didn't exist 
    if (globalVar == "Y") { 
     val = "0|0|c|d"; 
    } else { 
     val = "a|b|0|0"; 
    } 
} 
createCookie("pipes", val, 365); 

我必須說,在Cookie中保存此管道價值是非常不方便並且需要比可能需要更多的代碼才能存儲和檢索cookie中的多個值。

從您的意見,它聽起來像數據是storeID | storeLocation,你有兩個。我建議你只是這樣做:

var store1 = readCookie("store1"); // "1640|Jacob's Point" 
var store2 = readCookie("store2"); // "2001|Fred's Point" 

或者,如果你想使一個功能,你可以這樣做:

function readStoreInfo(item) { 
    var info = readCookie(item); 
    if (info) { 
     var data = info.split("|"); 
     return({id: data[0], name: data[1]}); 
    } 
    return(null); 
} 

function writeStoreInfo(item, obj) { 
    var val = obj.id + "|" + obj.name; 
    createCookie(item, val, 365); 
} 

所以,閱讀商店1中的數據,你只請致電:

var store1Info = readStoreInfo("store1"); 
store1Info.id = 123; 
writeStoreInfo("store1", store1Info); 

然後,您可以獨立地讀取和寫入store1和store2的數據。

+0

對於存儲值,你會有什麼建議 - 我的值是這種格式的字符串,例如:1640 | Jacob's Point | 2001 | Fred's Point – Jason 2012-03-23 20:34:35

+0

爲了使用這些數據,你將不得不將它分成它有四個組成部分。所以,爲什麼不把每個組件存儲在它自己的命名cookie值中,然後你可以將每個組件都檢索到它自己的變量中。然後,您不必將它們組合起來並將它們分開以便存儲和使用它們。四個變量,四個Cookie值。 – jfriend00 2012-03-23 20:49:46

+0

@Jason - 我添加了一個代碼示例。 – jfriend00 2012-03-23 21:19:08