kolla efter nya meddelande utan siduppdatering?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • vagann
    Medlem
    • 2011-07-18
    • 167

    #1

    kolla efter nya meddelande utan siduppdatering?

    hej , jag ville göra så att sidan visar om man har ett nytt meddelande utan att användaren behöver uppdatera sidan...

    så jag kom fram till
    PHP Code:
    var check;
    function checkForMessages() {
        $.get("/page.php", function($newpm_sql) {
            if($newpm_sql >= 1) {
                          clearTimeout(check);
                alert("nytt meddelande!");
            }
        }
    }
    
    setInterval(checkForMessages, 60000);- 
    
    det är en kod som jag skrev eftersom jag inte kan sånt så bra så vill jag att kolla upp koden , är den rätt? skulle den funka`?
  • voigtann1
    Forumvärd
    • 2001-06-14
    • 8810

    #2
    Du sätter ju aldrig variablen check till en timeout/interval, så att cleara den hjälper inte något, sen skall din /page.php retunera ett nummer (även om den kommer returnera en sträng).

    Sen gillar jag inte setInterval... metoden kan ju ta mer än 6 sekunder att köra (även om det inte är i detta fallet)
    "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

    Comment

    • l-boy
      Medlem
      • 2003-07-09
      • 223

      #3
      Det ser väl bra ut, om nu page.php returnerar hur många nya meddelanden som finns. Fungerar det inte?

      Comment

      • vagann
        Medlem
        • 2011-07-18
        • 167

        #4
        kan du eller någon som har lust att fixa det jag har missat? , som sagt eftersom jag är inte så bra på sånt

        Comment

        • voigtann1
          Forumvärd
          • 2001-06-14
          • 8810

          #5
          är ju svårt att säga då jag har ingen aning om vad din page.php retunera för data.
          "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

          Comment

          • vagann
            Medlem
            • 2011-07-18
            • 167

            #6
            jag tror att du frågar efter detta ?
            PHP Code:
            $newpm_sql = mysql_query("SELECT `id` FROM `pm` WHERE `to` = '". $_SESSION['id'] ."' AND `status` = '0'") or die(mysql_error()); 
            

            Comment

            • voigtann1
              Forumvärd
              • 2001-06-14
              • 8810

              #7
              och den retunera vad? ett tal alltid?
              "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

              Comment

              • vagann
                Medlem
                • 2011-07-18
                • 167

                #8
                nej , inte om det inte finns minst 1 meddelande , egentligen så körde jag message alert med php :
                PHP Code:
                $newpm_sql = mysql_query("SELECT `id` FROM `pm` WHERE `to` = '". $_SESSION['id'] ."' AND `status` = '0'") or die(mysql_error());
                if (mysql_num_rows($newpm_sql) >= 1)
                { $newpm = ' <b>('. mysql_num_rows($newpm_sql) .')</b>'; }
                else
                { $newpm = ''; } 
                
                men eftersom den inte uppdateras av sig själv så vill jag kör ajax/javascript

                Comment

                • voigtann1
                  Forumvärd
                  • 2001-06-14
                  • 8810

                  #9
                  Nu blandar du PHP och javascript. för det första så är PHP ett server språk och javascript är ett klientspråk för webbläsaren, $newpm måste skrivas ut på php sidan då javascript inte har någon som helst tillgång till några server variabler.


                  Nu känner jag att jag måste förklara lite hur jquery.get fungera:

                  get har en callback metod:
                  [kod]$.get("/page.php", function($newpm_sql) {
                  if($newpm_sql >= 1) {
                  }
                  });[/kod]i denna kod-block så är det function($newpm_sql) {} som är det callback block som kommer köras så fort ajax anropet har lyckats. Metoden har en parameter och det är den data som retuneras ifrån servern ( i ditt fall verkar det inte vara något då du inte har echo på $newpm, men vi säger att du har detta och då kommer $newpm_sql innehålla ' <b>(xxx)</b>' eller ''

                  Om vi har en HTML markup på sidan som ser ut som:

                  <div id="new_pm"></div> eller om du nu presentera $newpm från php (samma resultat som i din page.php)

                  så kan du ha:
                  [kod]var checkForMessages = function() {
                  $.get("/page.php", function($newpm_sql) {
                  $("#new_pm").html($newpm_sql);
                  }
                  };[/kod]Så kommer den uppdatera DOM-elementet med ett id med #new_pm med datan som ajax anropet får från serven.

                  jag hade gjort Javascripts koden:
                  [kod]var checkForMessages = function() {
                  $.get("/page.php", function(data) {
                  $("#new_pm").html(data);
                  check = setTimeout(checkForMessages, 6000);
                  }
                  });
                  var check = setTimeout(checkForMessages, 6000);[/kod]för att den bara skall hämta varje 6 sekund efter en lyckad hämtning av page.php
                  "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

                  Comment

                  • vagann
                    Medlem
                    • 2011-07-18
                    • 167

                    #10
                    ok tack för förklaringen, nu tror jag att jag fattar hur det går till .. och det är bara det , behöver inte lägga nåt mer i html strukturen , right?
                    går och testar den nu

                    Comment

                    • voigtann1
                      Forumvärd
                      • 2001-06-14
                      • 8810

                      #11
                      page.php behöver bara retunera det du vill presentera i #new_pm
                      "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

                      Comment

                      • vagann
                        Medlem
                        • 2011-07-18
                        • 167

                        #12
                        ok så blev det för mig (detta är i page.php ,head delen medan diven är i body.php)
                        Code:
                        <script type="text/javascript">var checkForMessages = function() {
                        	$.get("/page.php", function(data) {
                                $("#userbar").html(data);
                        		check = setTimeout(checkForMessages, 6000);
                            }
                        };
                        var check = setTimeout(checkForMessages, 6000);
                        </script>
                        men det funkade inte, har jag gjort fel nånstans?

                        Comment

                        • voigtann1
                          Forumvärd
                          • 2001-06-14
                          • 8810

                          #13
                          lägg upp koden eller berätta vad konsollen säger att det bli för fel.
                          "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

                          Comment

                          • voigtann1
                            Forumvärd
                            • 2001-06-14
                            • 8810

                            #14
                            det saknas ) i koden:
                            [kod]var checkForMessages = function() {
                            $.get("/page.php", function(data) {
                            $("#userbar").html(data);
                            check = setTimeout(checkForMessages, 6000);
                            });
                            };
                            var check = setTimeout(checkForMessages, 6000);[/kod] demo: http://jsbin.com/otusoz/edit#javascript,html,live
                            "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

                            Comment

                            • vagann
                              Medlem
                              • 2011-07-18
                              • 167

                              #15
                              vilken kod begär du ?

                              Comment

                              Working...