我有一个对象,我存储在一个cookie中,然后获取该对象并使用它进行一些检查,这很好,除了我所拥有的问题之外的所有问题
if(!arr.hasOwnProperty($(this).val())){
in
$(".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进行投票,那么我必须刷新页面。
有什么想法吗?
答案 0 :(得分: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
...