Javascript 如何在调用函数之前重定向?
我创建了一个站点,通过创建一个带有+1计数器的cookie来计算用户访问的次数。每五次访问后,它会要求用户注册。一旦用户注册了,它就会删除cookie并用注册信息替换它(这是为了学校,否则我永远不会这样做)。创建新cookie后,它将重定向到显示cookie中信息的新页面。然后,如果用户再次访问该站点,则应该在计数器启动之前重定向,使用与第一次重定向相同的标准。这是行不通的。它创建计数器cookie而不重定向 我使用的代码是:Javascript 如何在调用函数之前重定向?,javascript,redirect,cookies,Javascript,Redirect,Cookies,我创建了一个站点,通过创建一个带有+1计数器的cookie来计算用户访问的次数。每五次访问后,它会要求用户注册。一旦用户注册了,它就会删除cookie并用注册信息替换它(这是为了学校,否则我永远不会这样做)。创建新cookie后,它将重定向到显示cookie中信息的新页面。然后,如果用户再次访问该站点,则应该在计数器启动之前重定向,使用与第一次重定向相同的标准。这是行不通的。它创建计数器cookie而不重定向 我使用的代码是: <!DOCTYPE html PUBLIC"-//W3C//D
<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<script type="text/javascript">
/////// Variable "name" is what gives the cookie its name. ///////
var name = "cookie";
function redirect() {
var x = document.forms.reg.first.value;
var y = document.forms.reg.last.value;
if (document.cookie == "Name: " + x + " Email: " + y) {
window.location="registered.html";
}
else {
setCookie();
}
}
/////// This function will set the cookie if no cookie exists. ///////
//////// Then it will add the value of 1 to the cookie name. ////////
function setCookie() {
if (document.cookie) {
i = document.cookie.indexOf(name);
}
else {
i = -1;
}
if (i == -1) {
document.cookie = name+ "=1; max-age=" +2592000;
}
else {
var start = (document.cookie.indexOf("=", i) + 1);
var end = document.cookie.indexOf(";", i);
if (end == -1) {
end = document.cookie.length;
}
var count = eval(document.cookie.substring(start, end)) + 1;
document.cookie = name+ "=" +count+ "; max-age=" + 2592000;
var popup = count % 5;
if (popup == 0) {
alert("Please Register");
}
else {
return
}
}
}
function formCheck() {
var x = document.forms.reg.first.value
var y = document.forms.reg.last.value
if (x =="") {
alert("Something");
return false;
}
if (y =="") {
alert("Something Else");
return false;
}
else {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
document.cookie = "Name: " + x + " Email: " + y;
alert(document.cookie);
}
if (document.cookie == "Name: " + x + " Email: " + y){
window.location.replace("registered.html");
return false;
}
}
</script>
</head>
<body onload="redirect();">
<form name="reg" onSubmit="return(formCheck());">
Type your first name: <input type="text" name="first">
<br>
Type your last name: <input type="text" name="last">
<input type="submit">
</form>
</body>
</html>
</html>
我在跟踪你的函数调用时遇到了问题,所以我从头开始,我相信这正是你想要的。请检查它并相应地修改您的代码,而不是将其用作最终代码
<html>
<head>
<title>Test</title>
<script>
function updateVisits(){
var num_visits = getCookie('visits');
if( !num_visits ) {
num_visits = 0; // first visit
}
num_visits++; // add 1
setCookie ('visits', num_visits, 30); // create/update cookie
}
function checkVisits(){
var nag_limit = 5; // nag on 5+ visits
if(parseInt(getCookie('visits')) >= nag_limit) {
alert('Please register');
}
}
// Does user cookie exist?
function isRegistered(){
if(getCookie('user')) {
return true;
} else {
return false;
}
}
function registerUser()
{
var first = document.forms.reg.first.value;
var last = document.forms.reg.last.value;
if(first == ''){
alert('Please enter first name');
} else if(last == '') {
alert('Please enter last name');
} else { // everything checked out
var cookie_value = first + ' ' + last;
setCookie('user', cookie_value, 30); // save user cookie
window.location = 'registered.html';
}
return false;
}
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) +
((exdays==null) ? "" : ("; expires="+exdate.toUTCString()));
document.cookie=c_name + "=" + c_value;
}
function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++) {
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name) {
return unescape(y);
}
}
}
// Run every page load
window.onload = function(){
var registered = isRegistered(); // check if already registered, then redirect
if(registered) {
window.location = 'registered.html'; // user already registered
} else {
updateVisits(); // set/update cookie
checkVisits(); // nag user if needed
}
};
</script>
</head>
<body>
<form name="reg" onSubmit="return(registerUser());">
First name: <input type="text" name="first"><br>
Last name: <input type="text" name="last">
<input type="submit">
</form>
</body>
</html>
试验
函数updateVisits(){
var num_visions=getCookie(“访问”);
如果(!num_访问){
num_visions=0;//首次访问
}
num_访问+++;//添加1
setCookie('visions',num_visions,30);//创建/更新cookie
}
功能检查访问(){
var nag_limit=5;//在5次以上的访问中进行nag
if(parseInt(getCookie('visions'))>=nag_limit){
警报(“请注册”);
}
}
//用户cookie是否存在?
函数isRegistered(){
if(getCookie('user')){
返回true;
}否则{
返回false;
}
}
函数注册器()
{
var first=document.forms.reg.first.value;
var last=document.forms.reg.last.value;
如果(第一个=“”){
警报(“请输入名字”);
}else if(last==''){
警报(“请输入姓氏”);
}否则{//一切都已结帐
var cookie_值=第一个+“”+最后一个;
setCookie('user',cookie_值,30);//保存用户cookie
window.location='registered.html';
}
返回false;
}
函数setCookie(c_名称、值、exdays)
{
var exdate=新日期();
exdate.setDate(exdate.getDate()+exdays);
var c_值=转义(值)+
((exdays==null)?:(“expires=“+exdate.ToutString());
document.cookie=c_name+“=”+c_值;
}
函数getCookie(c_名称)
{
变量i,x,y,ARRcookies=document.cookie.split(“;”);
对于(i=0;iSo,根据我在那里收集到的信息,重定向在访问中不起作用的原因是因为它依赖于cookie的值x,y,其中的值不再存在。因此,如果它们不再具有document.form的值。。。。"那么,如果存在新的cookie,在访问时重定向的另一种方法是什么?你在register.html上的代码是什么?只是一个绑定到body onload的函数,它可以写出cookie的值。我非常感谢。我已经用我所拥有的交了作业,但我想这会很有用,至少可以看看我可以在哪里清理但我很难理解人们的代码,因为我对JavaScript是如此的陌生。所以我需要一段时间,通过谷歌搜索才能完全理解所有的功能。再次感谢你。
<html>
<head>
<title>Test</title>
<script>
function updateVisits(){
var num_visits = getCookie('visits');
if( !num_visits ) {
num_visits = 0; // first visit
}
num_visits++; // add 1
setCookie ('visits', num_visits, 30); // create/update cookie
}
function checkVisits(){
var nag_limit = 5; // nag on 5+ visits
if(parseInt(getCookie('visits')) >= nag_limit) {
alert('Please register');
}
}
// Does user cookie exist?
function isRegistered(){
if(getCookie('user')) {
return true;
} else {
return false;
}
}
function registerUser()
{
var first = document.forms.reg.first.value;
var last = document.forms.reg.last.value;
if(first == ''){
alert('Please enter first name');
} else if(last == '') {
alert('Please enter last name');
} else { // everything checked out
var cookie_value = first + ' ' + last;
setCookie('user', cookie_value, 30); // save user cookie
window.location = 'registered.html';
}
return false;
}
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) +
((exdays==null) ? "" : ("; expires="+exdate.toUTCString()));
document.cookie=c_name + "=" + c_value;
}
function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++) {
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name) {
return unescape(y);
}
}
}
// Run every page load
window.onload = function(){
var registered = isRegistered(); // check if already registered, then redirect
if(registered) {
window.location = 'registered.html'; // user already registered
} else {
updateVisits(); // set/update cookie
checkVisits(); // nag user if needed
}
};
</script>
</head>
<body>
<form name="reg" onSubmit="return(registerUser());">
First name: <input type="text" name="first"><br>
Last name: <input type="text" name="last">
<input type="submit">
</form>
</body>
</html>