JQuery автоматическое отделение обновления

JQuery автоматическое обновление израсходовал БОЛЬШУЮ память браузера. Есть ли способ остановить это. У меня было 2 отделения, обновляющиеся каждые 3 секунды, но я переместил их до 9 и 15 секунд, Они помогли немногому, чем дольше окно остается открытым на моем сайте, тем больше памяти требуется до наконец катастрофические отказы браузера.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" ></script>


<script>
var auto_refresh = setInterval(
function ()
{
$('#details2').load('links2.php').fadeIn("slow");
}, 15000); // refresh every 10000 milliseconds</script>
7
задан Jonathon Faust 20 June 2010 в 19:26
поделиться

2 ответа

Вы можете попробовать пропустить load() и использовать $.ajax вместо него. Я знаю, что load(); - это ajax-запрос, но мне кажется, что он забирает весь скрипт. Попробуйте запросить скрипт, выполнить вычисления в базе данных и вернуть данные в виде json. Я предполагаю, что вы отправляете полный html с данными из запроса к базе данных. Попробуйте сделать это с json вместо этого.

Вы получите данные в виде объекта, как, например, здесь.

{"variable":"foo"}

Затем вы можете получить данные с помощью простого оператора each.

$.ajax({
    url: "links2.php",
    type: "POST",
    dataType: "json",
    success: function(data){

       // data here is returned as objects since it's json
       $.each(data, function(key, value) {
            $("#details2").empty().append(value.variable);
       }); 

    }
});

Я думаю, что это не приведет к утечке памяти и в конечном итоге к краху браузера, даже если вы будете вызывать его каждую секунду или около того. Попробуйте и дайте мне знать, как все прошло.

Удачи!

2
ответ дан 7 December 2019 в 18:39
поделиться

Попробуйте изменить его на это:

// ...
$('#details2').empty().load('links2.php').fadeIn('slow');

Он может перестать явно указывать jQuery, чтобы он сначала опустошил контейнер, чтобы освободить обработчики событий и т. Д. (Хотя неясно, будут ли там какие-либо обработчики .. .)

править - вообще-то неважно; Я проверил источники jQuery, и похоже, что вызов .html () (который, я почти уверен, выполняет load () ) всегда вызывает empty () в любом случае первым.

0
ответ дан 7 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: