2012-10-14 41 views
-2

我有一個對象,即時通訊存儲在一個cookie中,然後獲取對象,並使用它的一些檢查,這是很好的,但除了問題我有的是Javascript的錯誤檢查,如果一個對象有一個屬性

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投票。

任何想法?

+0

,你可以告訴ARR是什麼? – davidkonrad

+0

這是一個JSON對象,只是跟蹤被投票的個人事物的ID。 – samuraiseoul

回答

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 
... 
+0

所以我應該做第二個變量,以便將它作爲一個字符串發送給cookie,並讓arr更好,更獨立? – samuraiseoul

+1

是的,應該這樣做。因爲你希望'arr'保持下一次使用的數組/對象。 – techfoobar

+1

由於除了用於設置cookie之外,您沒有使用'arr'的字符串化版本,所以您不需要使用其他變量。查看我的更新。 – techfoobar

相關問題