2016-03-25 12 views
-1

以下のコードは動作しません。私はcheckCookie()に電話をかけようとしていて、その関数内で元の関数のパラメータを介して2つの他の関数を呼び出しています。それはまったく動作しません。なぜこれは機能しませんか?これにはクッキー、関数、パラメータが含まれます

<!DOCTYPE html> 
<html> 
<head> 
<script> 

function setCookie(cname,cvalue,exdays) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (exdays*24*60*60*1000)); 
    var expires = "expires=" + d.toGMTString(); 
    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(cookieName, action1, action2) { 
    var temp = getCookie(cookieName); 
    if (temp!= "") { 
     window[action1]; 
    } else { 
     temp = window[action2]; 
     if (temp != "" && temp!= null) { 
      setCookie(cookieName, temp, 30); 
     } 
    } 
} 

function alertUser(message, varName){ 
    alert(message + varName); 
} 

function promptUser(message){ 
    prompt(message,""); 
} 

checkCookie("username", alertUser("Welcome back, ", temp), promptUser("Please enter in your name")); 
</script> 
</head> 
<body> 
</body> 
</html> 

は、私はあなたに私が試してみましたすべてのものを表示することができないことをお詫び申し上げますので、私はトラックを失っていることを非常に多く、多くの異なるコンボを試してみました。あなたの助けは本当にありがとう! :) checkCookie多くの異なるクッキーのために何度も何度も呼びたいと思っています。なぜなら、さまざまなアクションが必要な場合があります。そのため、その関数内からグローバル関数を呼び出すオプションを開いたままにしています。

+1

下のコメントを読んで、 "それは動作しません" 便利な説明ではありません。何かエラーがありますか? JavaScriptのコンソールウィンドウに何かが書かれていますか?デバッガを使用するとどうなりますか? – Dai

+0

まったく何も起こりません、文字通りコンソールにエラーはありません、白いページ –

+0

申し訳ありません@Daiにタグを付けるのを忘れました –

答えて

0

あなたはいくつかの問題を持って、

function setCookie(cname,cvalue,exdays) { 
    //omitted 
} 

function getCookie(cname) { 
    //omitted 
} 

function checkCookie(cookieName, action1, action2) { 
    //temp is available only here 
    var temp = getCookie(cookieName); 
    if (temp!= "") { 
     //action1(alertUser) bad usage 
     window[action1]; 
    } else { 
     //also action2(promptUser) bad usage 
     temp = window[action2]; 

     //redundant, just `if(temp)` 
     if (temp != "" && temp!= null) { 
      setCookie(cookieName, temp, 30); 
     } 
    } 
} 

function alertUser(message, varName){ 
    alert(message + varName); 
} 

//doesn't store value 
function promptUser(message){ 
    prompt(message,""); 
} 

//temp is not available here 
//although it's available, it's a bad idea to use vars from other functions 
//if person doesn't enter anything, this will break, no cycling 
checkCookie("username", alertUser("Welcome back, ", temp), promptUser("Please enter in your name")); 

良い

function setCookie(cname, cvalue, exdays) { 
    //omitted 
} 

function getCookie(cname) { 
    //omitted 
} 

function checkCookie(cookieName, callback) { 
    var temp = getCookie(cookieName); 
    if (temp) { 
    callback(null, temp); 
    } else { 
    callback('No cookie', null); 
    } 
} 

function callbackFn(err, result) { 
    if (err) { 
    var uname = prompt('Please enter in your name'); 
    if (uname === '') { 
     //hit ok, but no value, re-show prompt 
     checkCookie('username', callbackFn); 
    } else if (uname) { 
     //entered value, hit ok 
     setCookie('username', uname, 30); 
    } else { 
     //hit cancel 
     checkCookie('username', callbackFn); 
     //or leave website? 
    } 
    } else { 
    alert('Welcome back, ' + result); 
    } 
} 
checkCookie('username', callbackFn); 
関連する問題