2010-11-29 9 views
3

Ich versuche, ein Benutzerfeld mithilfe von jQuery zu aktualisieren.Ich bekomme "Funktion nicht definiert" mit setInterval mit jQuery. Warum?

Mein Code ist ...

jQuery(document).ready(function(){ 
    setInterval("imStillAlive()", 6000); 
    function imStillAlive() { 

     jQuery.post('/users/update_useractive', 
    function(data){ 
    alert("updated"); 
    });//post 
    } 
    }); 

Der obige Code, wenn RAN den Fehler zeigt ...

"imStillAlive" nicht

definiert

Wie dieses Problem zu beheben?

Antwort

2

diese Lösung Versuchen Sie, wie erwähnt von Alex, es ist nicht notwendig, es in document.ready zu schreiben, wie Sie es nicht sind irgendeine DOM Manipulation machen.

setInterval(function(){ 
    imStillAlive(); 
}, 6000); 

function imStillAlive() {  
    jQuery.post('/users/update_useractive', 
    function(data){ 
     alert("updated"); 
    });//post 
} 
+0

Nur Problem mit diesem, wenn der Beitrag nicht durch die nächsten 6 Sekunden beendet ist, wird es wieder veröffentlichen. – alex

+0

hmm du hast Recht. Sie haben den richtigen Code gepostet. –

+0

Akzeptierte Antwort spiegelt das nicht wider: P Naja, ich schätze, Sie könnten sagen, dass ein POST, der länger als 6 Sekunden dauert, eine Art Randfall ist. – alex

3

paar Probleme hier ...

  • "imStillAlive()" ruft eine eval() Typ Funktion intern. Tu das nicht.
  • Sie posten in einem setInterval(). Würdest du lieber wissen, dass die Post fertig ist, bevor du sie wieder anrufst?
  • Sie führen keine DOM-Manipulation durch, warten Sie also nicht auf DOM.
  • imStillAlive() ist ein ziemlich schlechter Name für eine Funktion.
  • Jetzt ist dies ein wenig greifbar, aber wenn dies verwendet wird, um festzustellen, ob der Benutzer noch auf Ihrer Website aktiv ist, ist nicht 6 Sekunden ein wenig zu häufig, um Ihre Datenbank zu aktualisieren? Wenn jemand seinen Browser geöffnet lässt, wird das nicht unnötig Ressourcen ruinieren? Wenn viele Benutzer ihren Browser geöffnet lassen, wird das nicht selbst DOSing sein? : P

Dies scheint besser ...

(function($) { 

    (function update() { 
     setTimeout(function() { 
      $.post('/users/update_useractive', 
       function(data){ 
       alert("updated"); 
       update(); 
      }); 
     }, 6000); 
    })(); 

})(jQuery); 

See it on JSFiddle.net

+0

(Dokument) .bereits imStillAlive Wie kommt es? –

+1

Chinmayee, Alex Lösung verwendet nicht (Dokument) .ready. (Funktion ($) {}) (jQuery); ist eine selbst-ausführende anonyme Funktion. –

Verwandte Themen