2014-02-27 61 views
0

問題似乎是調用函數vote_ipcheck()vote_cookie_check()都拋出錯誤Uncaught TypeError: undefined is not a function。如果我把函數的內容放在$.getJSON call內,那麼這不是問題,但是調用該函數會引發該錯誤。在異步函數中調用函數javascript(流星)undefined

如果有人有一個想法,爲什麼這樣的事情發生,這將是偉大的。

if (ip_check) { 
     $.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){ 

      console.log(data.host); 

      var vote_ipcheck = vote_ipcheck(data.host); 
      var vote_cookie_check = vote_cookie_check(); 

      if (vote_ipcheck && vote_cookie_check) { 
       Router.go('pollyResults', {_id: id}); 
      } else if (vote_ipcheck == false && vote_cookie_check == false) { 
       update_poll(); 
      } 

     }); 
    } 

    function vote_cookie_check() { 
     // Handling the cookie business 
     console.log(ReactiveCookie.list()); 

     if (ReactiveCookie.get('voted')) { 
     var object_voted = JSON.parse(ReactiveCookie.get('voted')); 
     if (id in object_voted) { 
      if (object_voted[id] == true) { 
        return true; 
      } 
     } else { 
      object_voted[id] = true; 
      ReactiveCookie.set('voted', JSON.stringify(object_voted), {days: 365}); 
      return false; 
     } 
     } else { 
      var object_voted = {}; 
      object_voted[id] = true; 
      ReactiveCookie.set('voted', JSON.stringify(object_voted), {days: 365}); 
      return false; 
     } 
    } 

    function vote_ipcheck(ip) { 
     ip_voted = ip_array.indexOf(ip); 

     if (ip_voted > -1) { 
      return true; 
     } 
     else { 
      Polls.update({_id: id}, {$push : {already_voted : ip}}); 
      return false;   
     } 
    } 
+0

您可以嘗試通過提供回調來編寫它們,並查看它們是否可以正常工作。 –

回答

1

,如果你想使用全局函數與這些名字不要在局部範圍內重新定義vote_ipcheckvote_cookie_check。給本地變量不同的名稱。

 var ipcheck = vote_ipcheck(data.host); 
     var cookie_check = vote_cookie_check(); 

     if (ipcheck && cookie_check) { 
      Router.go('pollyResults', {_id: id}); 
     } else if (ipcheck == false && cookie_check == false) { 
      update_poll(); 
     } 
+0

似乎正常工作,沒有注意到函數名稱和變量名稱在JavaScript中衝突。謝謝。 – user1952811