утечка памяти. $.post
Добрый день. Пишу первый гаджет для боковой панели vista (то есть работа идет только в IE7 и выше), нашел утечку памяти в его простом коде
$().ready(main); function main(){ if ($('#left').is(':empty')) $('#preloader').show(); $.post("http://example.com",callback); } function callback(data){ $('#preloader').hide(); var post_server = $(".table1",data).find("tr:eq("+server+")").find("td:eq(0)").find("b").text(); var post_online = $(".table1",data).find("tr:eq("+server+")").find("td:eq(2)").text(); $('#left').html(post_server); $('#right').html(post_online); } setInterval(main,180000); через несколько часов работы гаджет сжирает просто огромное количество памяти. Гуру, помогите советом по мере сил, а то я пока разобраться не могу. :( Что нужно сделать, чтобы очистить все неиспользуемые объекты-переменные дабы при каждой итерации память не накапливалась? |
Вроде, причин для утечки нет. Если $.ajax убивает xhr после вызова callback, то все scope должны тихо мирно самоубиваться.
Кстати говоря, столкнулся с тем, что при активном использовании $.post firefox тоже без причины съедает всю память, так что, за темой буду следить внимательно. |
Как можно додуматься засунуть jQuery в гаджет рабочего стола!?
|
Цитата:
<script src="js/jquery-1.4.2.min.js" type="text/javascript"></script> |
не знаю как насчет $.post, но от ajax функций от jQuery пришлось отказаться. До сих пор не узнал как очищать память от $.post.
Делаю как показано в этой статье (без jQuery, просто голый JavaScript) - все прекрасно работает, утечек памяти нет: http://www.nik0las.ru/blog/2009/06/1...aks_at_ie.html осталось разузнать как теперь разбирать пришедший ответ с сервера и все будет ок. Вот такая конструкция не работает (внутри функции getServerData). qw = $('#d1',_request.responseText).text(); alert(qw); при условии, что сервер отдает такой ответ: <html> <head> </head> <body> <div id='d1'>server</div> <div id='d2'>client</div> </body> </html кто поможет с разбором? |
var qw = _request.responseText; |
я понимаю, что ответ сервера хранится в свойстве _request.responseText
Я могу вывести весь ответ, а как вывести его часть? Если в ответ приходит html код, в котором проставлены id-шники на определенных дивах, то можно ли извлечь информацию с определнного айдишника? Расписываю подробнее вот ответ сервера: <html> <head> </head> <body> <div id='d1'>server</div> <div id='d2'>client</div> </body> </html> (я хочу оттуда достать строчку 'server', которая находится в div с id = ''d1") в первом посте я публиковал функцию, использующую jQuery, которая все это легко делала (на другом ответе сервера находила нужный элемент) вот она function callback(data){ $('#preloader').hide(); var post_server = $(".table1",data).find("tr:eq("+server+")").find("td:eq(0)").find("b").text(); var post_online = $(".table1",data).find("tr:eq("+server+")").find("td:eq(2)").text(); $('#left').html(post_server); $('#right').html(post_online); } то есть тут ответ сервера хранится в переменной data, с помощью селекторов jQuery парсим ответ и достаем нужный элемент. Сейчас я отказался от функции $.post (потому что из-за нее происходили адские утечки памяти) и переписал скриптик на "голом" JavaScript Теперь ответ сервера должен обрабатываться как-то по другому. Вот функция аналог callback'а: function getServerData() { var _request = getHttpRequest(); _request.onreadystatechange = function() { if (_request.readyState == 4 && _request.status == 200) { alert(_request.responseText); count ++; _request = null; } } _request.open("POST", "http://test/req/server.php", true); _request.send(null); } в alert я передаю полный ответ сервера, хранящийся в _request.responseText alert естественно выводит вот что: ![]() как мне разобрать _request.responseText На составляющие и вывести только содержимое div'а c id = 'd1'? надеюсь изложил свой вопрос довольно подробно, кто может помочь? |
Если вам нужно парсить ответ сервера, так отдавайте сервером легко парсящийся ответ, JSON, например. Или ответ сервера не вы формируете?
|
Ответ сервера формирую не я.
Ответ сервера - просто html страничка, ну допустим какой-нить yandex.ru Я хочу его распарсить. |
Выдирайте содержимое body, кладите его в div, а оттуда уже DOM-методами.
|
_request.responseText.getElementById('d1') почему-то не работает. |
Вы первые два действия в моём последнем предложении пропустили.
|
а использовать селекторы jQuery
для _request.responseText возможно каким либо образом? |
Цитата:
|
Цитата:
Осталось поместить в оберточку "<div></div>" ответ сервера и все будет чики-поки. В общем, всем спасибо за ответы, я так понимаю, что все встало на свои места. |
Цитата:
тем более, что ваш ворос выглядит так, как будто вы не прочитали ответ Kolyaj |
Цитата:
Цитата:
Давайте я выстрою логическую цепочку за вас. Итак судите сами - вначале я спрашиваю о возможности селектинга вообще, а потом о возможности применения методов jQuery. Для меня первый тезис не является достаточным для положительного ответа на мой вопрос о применении jQuery, поэтому я его и задаю. А ну да, и вот вам еще пара аргументов: otvernu - новичек на форуме, сообщений 10, регистрация 12.08.2010 Gvozd - Матрос, сообщений 3,821 , регистрация 03.04.2008 Могу в вашем стиле задать такой встречный вопрос: Gvozd, а почему вы задаете мне вопрос, если я ясно дал понять, что данная тема форума меня уже не интересует? Это такой "тонкий" троллинг на техническом форуме или чо? |
Часовой пояс GMT +3, время: 19:00. |