-2

我有一个对象,我将其存储在 cookie 中,然后获取该对象并将其用于一些检查,这很好,但我遇到的问题都与该行有关

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,依此类推。我投票认为 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
...

上面的第二行将您的arr变量覆盖为字符串。第二次,它是您正在调用的字符串对象.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 回答