-2

私はImがCookieに保存し、オブジェクトを取得していくつかのチェックに使用するオブジェクトを持っています。これは良いことですが、Imが抱えている問題は行にあります。

if(!arr.hasOwnProperty($(this).val())){

$(".not").click(function() {
//alert($(this).val()+JSON.stringify(arr));
    if(!arr.hasOwnProperty($(this).val())){
    $.getJSON("<?php echo BASE_URL;?>json/startup/not", {id: $(this).val()}, function(json){
    if(json.status == "OK"){
        arr[json.data.id] = json.data.id;
        arr = JSON.stringify(arr);
        $.cookie('votedId', arr);
        $('#percent'+json.data.id).html(json.data.percent);
        $('#votes'+json.data.id).html(json.data.votes);
    }
    });
    }else{
        alert("Already voted on this startup!");
    }
    //alert($(this).val());
});

何が起こるかというと、私が初めてそれを行うと、渡された値によってプロパティがないことに気づき、投票が行われるようになります。それからそれはそれがそうあるべきであるようにそれを投票させません。

ただし、問題は、最初の要素が投票された後、投票できるページ上の他の要素にあり、渡されたIDによってプロパティが存在しない場合でも、存在すると言うことができます。ただし、ページを更新すると投票できます。

その説明から上記が少しわかりにくいと感じたからといって、例を挙げましょう。

私は、投票が多いかどうかにかかわらず、複数のものを持っています。最初のIDは1、2番目のIDは2というように続きます。私は1がホットであると投票したので、cookieとarr配列はプロパティ1を持つように更新され、再度投票することはできません。しかし、その後、他のすべてのことは、彼らが投票されていなくても、彼らも投票されたと言います。だから今は2に投票できません。でもページを更新すれば大丈夫です。しかし、要素3に投票したい場合は、ページを更新する必要があります。

何か案は?

4

1 に答える 1

2

コードには、次のものがあります。

...
arr[json.data.id] = json.data.id;
arr = JSON.stringify(arr); // <-- this is likely the reason for the error
...

上記の2行目は、arr変数を文字列に上書きします。2回目は、呼び出している文字列オブジェクトです.hasOwnProperty(...)-これにより、JSエラーが発生します。

これはそれを解決するはずです:

...
arr[json.data.id] = json.data.id;
// arr = JSON.stringify(arr); // drop this line
$.cookie('votedId', JSON.stringify(arr)); // assign directly without overwriting arr
...
于 2012-10-14T04:59:50.080 に答える