2017-09-11 5 views
0

Ich habe den folgenden jQuery-Code, der eine HTML-Seite abruft, die ich jede Sekunde erzeuge. Nach einer Weile führt dies zu einem nicht ausreichenden Speicherfehler. Wie repariert man?JQuery erfrischende Seite führt zum Browser nicht genügend Speicher

+0

warum nicht aktualisieren Sie die Seite, anstatt "zu bekommen" jede Sekunde plus jede Sekunde ist ein bisschen viel, warum nicht alle 10 aktualisieren? – Deckerz

+0

Da ein AJAX-Anruf jede Sekunde erstellt wird, wird sowohl der Browser als auch der Server extrem schwer. –

+0

Überprüfen Sie dies auf der Registerkarte "Netzwerk" der Browser-Entwicklungstools. Höchstwahrscheinlich werden die neuen Anforderungen ausgelöst, bevor das vorherige Ereignis beendet wurde und dies nach einiger Zeit Speicher- und Bandbreitenprobleme verursacht. Sie sollten sicherstellen, dass die vorherige Anfrage beendet wurde, bevor Sie erneut anrufen –

Antwort

0

Wenn die neuen Anforderungen ausgelöst werden, bevor das vorherige Ereignis beendet wurde, vergewissern Sie sich, dass die vorherige Anforderung abgeschlossen ist, bevor Sie erneut aufrufen. Ich habe den Code unten nicht wirklich getestet, aber er sollte Sie in die richtige Richtung weisen. Verwenden Sie setTimeout und recursion anstelle von setInterval. Offensichtlich gibt diese Lösung keine scharfen Ein-Sekunden-Intervalle, wenn sie aus irgendeinem Grund benötigt werden (mehr als eine Sekunde plus den Anforderungszyklus, der auf die Netzwerkbedingungen des Benutzers zurückzuführen ist), aber ich nehme an, dass Sie nur eine Gesicht stimulierte Aktualisierung und strikt benötigen Timing ist nicht entscheidend.

Immer noch ich zweitens die Kommentare oben, dass 1 Sekunde HTTP-Anfrage-Intervall ist riskant und ein wenig missbräuchlich für beide Browser und Server, und so sollte es einen wirklich guten Grund, es zu verwenden.

$(document).ready(function() { 
    function refresh(){ 
     $.get('some_page.html', function (data) { 
      $('#some_div').html(data); 

      // call itself recursively 
      setTimeout(refresh, 1000); 
     });    
    }; 

    // init 
    refresh(); 
}); 
Verwandte Themen