2016-01-21 179 views
0

我有一個問題: 我試圖在我的網站上創建一個個人消息系統,對於這個我的想法是,用戶會在每個消息中顯示新消息的數量聊天...... 在本screenshot加載並正確顯示新消息

是的,我來自德國,所以在截圖的語言是德語... 你看到紅色的「盒子」,在它的號碼是多少?這是我想爲每次聊天創建的一個,我不知道如何。用PHP只有這將是容易的,但我想,這些數字是對的總是和全自動刷新...

所以我的HTML的代碼是:

<div class="chat_body"> 
    <a href="index.php?section=pn&mode=loadConversation&ConversationID=<?php echo $conversation['id']; ?>"> 
     <div class="user" id='<?php echo $i ?>' data-user-id='<?php echo $user_id?>' data-conv-id='<?php echo $conversation['id'] ?>'> 
      // Displaying the name, etc... (for clarity i left it out) 
     <?php     
      echo "<div class='rightCountUnreadMessages'>"; 
       echo '<div class="badge" id="badge-'.$i.'"></div>'; 
      echo "</div>"; 
     ?> 
     </div> 
    </a> 
</div> 

在頁面我的javascript的頂部,加載數字是:

jQuery(document).ready(function() { 
    //jQuery(setInterval(function() { 
     friends_count = document.getElementsByClassName("user").length; 
     for(var i=1; i < friends_count+1; i++) { 
      el = document.getElementById(i); 
      conv_id = el.getAttribute("data-conv-id"); 
      user_id = el.getAttribute("data-user-id"); 
      test = i; 

      jQuery.post('./Bauteile/Accounts/loadCounts/loadPNCount.php', {user_id_loadPN: user_id, conv_id: conv_id}, function(result){ 
       console.log(result); 
       console.log(test); 

       if(result > 99) { 
        result = "99+"; 
       } 

       if(result > 0 || result == "99+") { 
        document.getElementById("badge-"+test).innerHTML = result; 
       } 
      }) 
     } 
    //}, 500)); 
}); 

而在Javascript中所要求的文件中有如下內容:

<?php 
    $conv_id = $_POST['conv_id']; 
    $from_id = $_POST['user_id_loadPN']; 

    echo (int)mysql_result(mysql_query("SELECT COUNT(*) FROM `messages` WHERE `group_id` = $chat_id AND `from_id` = $from_id AND `read_on` is NULL"), 0); 
?> 

我知道很難看透這一切,但我希望有人能幫助我... 我不知道我做錯了什麼,但代碼不起作用... 我認爲這是可能是因爲for循環,但我不知道,我怎麼解決這個問題?

如果您有疑問,請向... 預先感謝您

+0

貴後的JQuery函數返回的東西嗎?在這一行中:console.log(result); – smdsgn

+0

是的,3次0.這不是正確的數字,但我認爲,它是因爲for循環連接到jQuery.Post ... – Gykonik

回答

1

問題是你在循環中有一些異步的東西。要解決這個問題,你需要關閉。您需要將for循環的內容封裝到以i爲參數的函數中,然後在循環中調用該函數。

因此,嘗試這樣的事:

function doClosure(i) { 
    var el = document.getElementById(i), 
     conv_id = el.getAttribute("data-conv-id"), 
     user_id = el.getAttribute("data-user-id"), 
     test = i; 

    jQuery.post('./Bauteile/Accounts/loadCounts/loadPNCount.php', {user_id_loadPN: user_id, conv_id: conv_id}, function(result){ 
     console.log(result); 
     console.log(test); 

     if(result > 99) { 
      result = "99+"; 
     } 

     if(result > 0 || result == "99+") { 
      document.getElementById("badge-"+test).innerHTML = result; 
     } 
    }); 
} 

for (var i = 1; i < document.getElementsByClassName("user").length+1; i++) { 
    doClosure(i); 
} 
+0

這是解決方案!非常感謝你! * - *你幫了我很多! :)) – Gykonik

+0

但後來我的基本想法,即jQuery和forloop不能正常工作是正確的,但我從來沒有想過,這是如此混亂...:P – Gykonik

+0

不客氣@Gykonik。簡單地說,你的JQuery post請求不會像for循環那樣以相同的速度進行。所以她沒有采取正確的數據。這就是爲什麼你需要關閉。 – smdsgn

0

能否請您發表您的完整的原始代碼?

你說「它工作不」,實際上沒有工作?你能隔離目前工作的部分代碼嗎?

控制檯日誌的輸出是什麼?

+0

我不知道,我可以發佈更多...我認爲它沒用,發佈200行之間,他們沒有任何關係... – Gykonik

+0

事情,這不工作的權利是jQuery的功能...其餘的作品完美。 User_id的一切都是正確的,直到它涉及到jQuery函數...在這個完整的變量搞砸了,這就是爲什麼我認爲for-loop和jQuery函數不能正確協同工作的原因...... – Gykonik

+0

確認這些語句: - 'friends_count'是一個數字 - 你循環'friends_count'倍 - jQuery的Ajax響應是正確的(使用該瀏覽器的研究與開發條; F12) – JesusTheHun

0

除了我的帖子:

我更換

jQuery.post('./Bauteile/Accounts/loadCounts/loadPNCount.php', {user_id_loadPN: user_id, conv_id: conv_id}, function(result){ 

console.log(user_id + " " + i);  
jQuery.post('./Bauteile/Accounts/loadCounts/loadPNCount.php', {user_id_loadPN: user_id, conv_id: conv_id}, function(result){ 
    console.log(result + " " + i); 

調試...

控制檯輸出爲:

  • 21 1行:254(=在這個例子中第一的console.log)
  • 26 2行:254
  • 27 3線:254
  • 26 4行:256(=秒。在這個例子中CONSOLE.LOG)
  • 27 4行:256
  • 21 4行:256

因此,我懷疑對於環和jQuery函數不一起工作得很好。 ..