2016-04-24 109 views
2

在這個例子中,我將通過提示詢問用戶名字,然後使用cookie寫入div,「Welcome,savedCookie!」進入之後,然後每次在到期前訪問該頁面。用JavaScript設置,讀寫Cookie

我讓瀏覽器顯示一個提示,詢問我的名字,然後寫入div作爲「Welcome,undefined!」我無法弄清楚爲什麼我收到錯誤。

//Setting cookie for Users Name 
 
function set_it() { 
 
    var userName = prompt("Please Enter Your Name", ""), 
 
     thetext = "name=" + userName, 
 
     expdate = ";expires=Mon, 27 Mar 2017 13:00:00 UTC", 
 
     newtext = encodeURIComponent(thetext); 
 
    newtext += expdate; 
 
    document.cookie = newtext; 
 
    } 
 
    //Reading & Writing cookie 
 

 
function read_it() { 
 
    var rawCookie = document.cookie; 
 
    bakedCookie = decodeURIComponent(rawCookie); 
 
    yumCookie = bakedCookie.split("="); 
 
    document.getElementById("greeting").innerHTML = "<p>Welcome, " + yumCookie[1] + "!</p>"; 
 

 
} 
 

 
if (document.cookie) { 
 
    read_it(); 
 
} else { 
 
    set_it(); 
 
    read_it(); 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Page Title</title> 
 
</head> 
 

 
<body> 
 
    <div id="greeting"> 
 
    <script src="prjs13_2.js"></script> 
 
    </div> 
 

 
</body> 
 

 
</html>

回答

0

嘗試在控制檯中運行你的唯一的代碼,並期待您的get-什麼

var userName = prompt("Please Enter Your Name", ""), 
     thetext = "name=" + userName, 
     expdate = ";expires=Mon, 27 Mar 2017 13:00:00 UTC", 
     newtext = encodeURIComponent(thetext); 
    newtext += expdate; 
    document.cookie = newtext; 

我這樣做是爲了名爲「大衛」和我有這個 -

name%3Ddavid; expires = Mon,27 Mar 2017 13:00:00 UTC「

當您設置您的cookie時,您的名稱屬性無效。 試試這個代碼,而不是(不encodeURIComponent方法和,而不是逗號) -

var userName = prompt("Please Enter Your Name", ""); 
var thetext = "name=" + userName; 
var expdate = ";expires=Mon, 27 Mar 2017 13:00:00 UTC"; 
var newtext = thetext; 
document.cookie = newtext; 
+1

謝謝您的回覆!我做了一些更多的測試,它必須是阻止所需效果的瀏覽器設置。我在小提琴上進行了測試,完成了我所需要的工作,之後我在Edge中進行了測試,並獲得了所需的效果。 –

0

您可以使用下面的函數來獲取/設置Cookie:

function setCookie(cname, cvalue, exdays) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (exdays*24*60*60*1000)); 
    var expires = "expires="+d.toUTCString(); 
    document.cookie = cname + "=" + cvalue + "; " + expires; 
} 

function getCookie(cname) { 
    var name = cname + "="; 
    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); 
     } 
     if (c.indexOf(name) == 0) { 
      return c.substring(name.length, c.length); 
     } 
    } 
    return ""; 
} 

function checkCookie() { 
    var user = getCookie("username"); 
    if (user != "") { 
     alert("Welcome again " + user); 
    } else { 
     user = prompt("Please enter your name:", ""); 
     if (user != "" && user != null) { 
      setCookie("username", user, 365); 
     } 
    } 
} 

下面是一些提琴例如:fiddle

+1

在發佈此問題之前搜索答案時,我也遇到了此解決方案。但是,我正在爲一本書中的課程做這個,而這本書希望這樣做。 我做了一些更多的測試,它必須是阻止所需效果的瀏覽器設置。我在小提琴上進行了測試,完成了我所需要的工作,之後我在Edge中進行了測試,並獲得了所需的效果。儘管謝謝你的回覆!非常感激! –