0

評価を表示するJavaスクリプト関数があります。ユーザーが星をクリックして評価すると、評価してくれてありがとうというメッセージを表示する必要があり、ユーザーがページを更新すると、この記事を評価するのではなく、評価してくれてありがとうというメッセージを表示する必要があります。以下は私のコードです: 誰でも私を助けることができますか?

<script type="text/javascript">


var sMax;   // Isthe maximum number of stars
var holder; // Is the holding pattern for clicked state
var preSet; // Is the PreSet value onces a selection has been made
var rated;

// Rollover for image Stars //



function rating(num){
    sMax = 0;   // Isthe maximum number of stars
    for(n=0; n<num.parentNode.childNodes.length; n++){
        if(num.parentNode.childNodes[n].nodeName == "A"){
            sMax++; 
        }
    }

    if(!rated){
        s = num.id.replace("_", ''); // Get the selected star
        a = 0;
        for(i=1; i<=sMax; i++){     
            if(i<=s){
                document.getElementById("_"+i).className = "on";
                document.getElementById("rateStatus").innerHTML = num.title;    
                holder = a+1;
                a++;
            }else{
                document.getElementById("_"+i).className = "";
            }
        }
    }
}

// For when you roll out of the the whole thing //
function off(me){
    if(!rated){
        if(!preSet){    
            for(i=1; i<=sMax; i++){     
                document.getElementById("_"+i).className = "";
                document.getElementById("rateStatus").innerHTML = me.parentNode.title;
            }
        }else{
            rating(preSet);
            document.getElementById("rateStatus").innerHTML = document.getElementById("ratingSaved").innerHTML;
        }
    }
}

// When you actually rate something //
function rateIt(me){
    if(!rated){
        document.getElementById("rateStatus").innerHTML = document.getElementById("ratingSaved").innerHTML + " :: "+me.title;
        preSet = me;
        rated=1;
        sendRate(me);
        rating(me);
    }
}

// Send the rating information somewhere using Ajax or something like that.
function sendRate(sel){
    alert("Your rating was: "+sel.title);
}


</script>





<form id="form1">


<span id="rateStatus">Rate This Article:</span>
<span id="ratingSaved">Thank you for rating.</span> 
<div id="rateMe" title="Rate Me...">
    <a onclick="rateIt(this)" id="_1" title="ehh..." onmouseover="rating(this)" onmouseout="off(this)"></a>
    <a onclick="rateIt(this)" id="_2" title="Not Bad" onmouseover="rating(this)" onmouseout="off(this)"></a>
    <a onclick="rateIt(this)" id="_3" title="Pretty Good" onmouseover="rating(this)" onmouseout="off(this)"></a>
</div>
4

3 に答える 3

0

ユーザーが記事を評価したらすぐに Cookie を保存し、ページを再度読み込むときにその Cookie の値をチェックして、記事が既に読み込まれているかどうかを確認する必要があります。

于 2013-01-18T02:07:14.813 に答える
0

または、とにかくページを更新している場合は、サーバーからこの記事の現在の評価を取得することもできます

于 2013-01-18T02:13:46.920 に答える
0

ここにはいくつかのオプションがあり、何を行うかは要件によって異なります。

大きな問題は永続性の 1 つです。それによって、私が何かを評価して感謝のメッセージを受け取った場合、同じページを携帯電話のブラウザーまたは別のコンピューターのブラウザーで見た場合に、それが表示されるはずですか? それ以外の場合は、一度表示する必要がある単なるメッセージであり、後で「評価してください」オプションが再び表示されてもかまいませんか?

ページの更新間の状態の保存に関する質問に基づいて、あなたのニーズは永続性を保存する側にあるようです。

最終的に、評価状態が永続的に保存されることを保証する唯一の方法は、評価状態をバックエンド (サーバー) アプリケーションのユーザー アカウントに関連付けることです。そうすれば、他のブラウザから同じページを表示したり、しばらくしてから、サーバーがデータベースを検索して、「Geuis がこれを評価し、ありがとうメッセージを表示する」ことを確認できます。

短い時間だけお礼を表示する必要がある場合は、memcache などの一時キャッシュにキーを保存できます。ページが更新されるたびに、JavaScript の短い部分がキャッシュ サーバーに xhr リクエストを送信して、ページを評価したかどうかを確認できます。最終的にはキーがキャッシュから削除されるため、1 時間後または 1 日後にページに戻ってページを評価するように求められます。これは半永久的なソリューションですが、アカウントに関連付けられている限り、どのデバイスやブラウザーでも機能します。

最も壊れやすいが、実装するのが最も簡単なソリューションは、純粋にクライアント側です。ここでのオプションは、a) 評価された/評価されていない値を Cookie に保存するか、b) localStorage を使用するかのいずれかです。どちらの状況でも、状態を保存できます。ただし、 Cookie と localStorage はデバイス間またはブラウザー間で転送されません。localStorage は期限切れになりませんが、最終的に Cookie は期限切れになります。また、ユーザーは最終的に Cookie と localStorage キャッシュをクリアすることを決定し、状態を「Rate me」に戻すことができます。

コード サンプルを提供していないのは、ご覧のとおり、永続性の範囲に沿って達成しようとしていることに答えが最初にあるためです。

そして、言うまでもなく、匿名の永続性などは実際にはありません。つまり、ユーザーをサイトに対して匿名にすることはできませんが、ブラウザー間で転送する方法で投票状態を永久に保存することはできません。そのためには、サーバー側のアカウントに似たものが必要です

于 2013-01-18T03:16:57.690 に答える