2014-10-30 136 views
-1

我正在製作通知系統userscript。基本上它的作用是發送GET請求到一個帶有.txt文件的站點。該文件輸出是這樣的:即使if語句爲false,變量= true

12345|User notification 
all|Everyone will see this 

12345是用戶的ID和all正好被設置要顯示的消息給大家。當我編寫用戶的ID(如12345)時,它會向ID 12345的特定用戶發送通知,如果我寫入「全部」,它會向每個人發送通知。

問題:我對每個通知都有一個解除按鈕(因爲兩者都可以同時顯示),但是當我解散這兩個通知時,然後發送一個新通知,兩個通知都會顯示出來,即使我被解僱了其中之一。這裏是我的代碼:

GM_xmlhttpRequest({ 
    method: "GET", 
    url: "http://website.com/notification.txt", 
    ignoreCache: false, 
    onload: function(response){ 
     res = trim(response.responseText); 
     array = res.split("\n"); 

     for(i = 0; i < array.length; i++) { 
      array2 = array[i].split("|"); 

      if(array2[0] == uid) { 
       userMessage = array2[1]; 
      } 
      if(array2[0] == "all") { 
       allMessage = array2[1]; 
      } 
     } 

     if(typeof userMessage !== 'undefined'){ 
      if(GM_getValue("userMessage") != userMessage) { 
       GM_setValue("userMessage", userMessage); 
       GM_setValue("userDismiss", false); 
      } 
     } 

     if(typeof allMessage !== 'undefined'){ 
      if(GM_getValue("allMessage") != allMessage) { 
       GM_setValue("allMessage", allMessage); 
       GM_setValue("allDismiss", false); 
      } 
     } 
    } 
}); 

看看這兩個if語句:

if(array2[0] == uid) { 

if(array2[0] == "all") { 

來檢查,如果用戶ID等於用戶的UID(用戶ID),或者如果它說all。再來看看這些:

if(GM_getValue("userMessage") != userMessage) { 

if(GM_getValue("allMessage") != allMessage) { 

這些檢查,如果從先前通知的存儲信息(內部GM_getValue)不等於它剛剛收到的新數據。如果相同,它不應該繼續,但是,如果只有一個通知不同,它會說兩個if語句都是真的,然後繼續。即使GM_getValue("userMessage") equals userMessage,它仍將繼續執行if語句,即使它說!=。另外,我在userMessage,allMessage和GM_getValue()函數上嘗試了console.log(),如果我嘗試爲所有人添加通知,它會說userMessage與GM_getValue(「userMessage )所以這些if語句有什麼問題,但我不知道是什麼。

任何幫助,將不勝感激,我在這裏很困難,所以請幫助我。讓我知道如果你需要更多的信息。

回答

0

我認爲你需要正確範圍的幾個變量在這裏,像(allMessageuserMessage,和其他一些)。我認爲一旦你的範圍allMessageuserMessage正常,你W¯¯生病好!

GM_xmlhttpRequest({ 
    method: "GET", 
    url: "http://website.com/notification.txt", 
    ignoreCache: false, 
    onload: function(response){ 
    var res = trim(response.responseText); 
    var array = res.split("\n"); 
    var array2 = []; 
    var allMessage, userMessage; 

    for(var i = 0; i < array.length; i++) { 
     array2 = array[i].split("|"); 

     if(array2[0] == uid) { 
      userMessage = array2[1]; 
     } 
     if(array2[0] == "all") { 
      allMessage = array2[1]; 
     } 
    } 

    if(typeof userMessage !== 'undefined'){ 
     if(GM_getValue("userMessage") != userMessage) { 
      GM_setValue("userMessage", userMessage); 
      GM_setValue("userDismiss", false); 
     } 
    } 

    if(typeof allMessage !== 'undefined'){ 
     if(GM_getValue("allMessage") != allMessage) { 
      GM_setValue("allMessage", allMessage); 
      GM_setValue("allDismiss", false); 
     } 
    } 
    } 
}); 

這種方式舊的結果不會影響新的結果。