[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: CakePHP Ajax
omcrew
Вопрос к знатокам CakePHP и AJAX.<br>На странице стоит аяксовский таймер
$ajax->remoteTimer(array( 'url'=>'/messages/refresh_outbox', 'frequency' => '3', 'update' => 'send_table'));
, каждые 3 секунды вызывается метод refresh_outbox контроллера messages, который достает из бд сообщения и помещает их в блок с id'шником send_table, в этом блоке создаются аяксовские объекты(ссылки - linkToRemote) для чтения и удаления сообщений без перезагрузки страницы. Поэтому получается так что каждые три секунды после вызова медода refresh_outbox на странице создается куча аяксовских объектов, причем объекты, созданные при предыдущем вызове, не удаляются из памяти, браузер начинает жрать память из за постоянно создающихся объектов.
Как освободить эти объекты перед обновлением?



Спустя 5 минут, 38 секунд (2.08.2006 - 16:59) vasa_c написал(а):
Ты хочешь сказать, что объекты обработавшие запрос не удаляются из памяти?
Опиши клиентскую структуру.

Спустя 15 часов, 58 минут (3.08.2006 - 08:57) omcrew написал(а):
не удаляются объекты которые создаются каждые три секунды в блоке send_table, в этот блок аяксом подтягиваются сообщения из бд без перезагрузки страницы с помощью таймера(remoteTimer).

Спустя 40 минут, 47 секунд (3.08.2006 - 09:38) vasa_c написал(а):
omcrew, ВООБЩЕ не удаляются или удаляются медленее, чем порожадются?
Осчастливь хотя бы кусочком кода, где это все происходит или примерным описанием алгоритма.

Спустя 1 час, 38 минут, 45 секунд (3.08.2006 - 11:17) omcrew написал(а):
Этот блок обновляется каждые 3 секунды по таймеру<br>
 
<form onsubmit="return false;">
<table>
 
<?php foreach ($OutboxMessages as $Message): ?>
  <tr>
    <td class="msg-name"><?php echo $Message['users']['lname']." ".$Message['users']['fname']?></td>
    <td class="msg-date"><?php echo $time->niceShort($Message['messages']['time']) . $html->checkbox('Message/check_send_'.$Message['messages']['id'], null, array('onclick' => 'toggleCheckSend( ''.$Message['messages']['id'].' ')', 'checked' => '0'));?></td>
  </tr>
  <tr>
    <td class="msg-subject"><?php echo $ajax->linkToRemote($Message['messages']['subject'], array('fallback'=>'#view', 'update'=>"message_content", 'url'=>"/messages/view_outbox/{$Message['messages']['id']}"), array(), "subObject"); ?></td>
    <td class="msg-action">
    	<?php echo $html->image('spinner.gif', array('alt'=>'Spinner', 'id'=>'search_spinner_send_'.$Message['messages']['id'], 'class'=>'none')).
    	 $ajax->linkToRemote('удалить', array('fallback'=>'#send_'.$Message['messages']['id'], 'url'=>"/messages/delete_out/{$Message['messages']['id']}"), array('id'=>'send_'.$Message['messages']['id'],'onclick'=>'changeToProgressBar( 'search_spinner_send_'.$Message['messages']['id'].' ', 'send_'.$Message['messages']['id'].' ');', 'class'=>'block'), "delObject");?>
    </td>
  </tr>
<?php endforeach;?>  
<tr>
   <td>
            <?php
            $options = array(
                'url'       => '/messages/delete_out_check/', 
                 'update'    => 'message_content',
                'complete'  => "new Effect.Appear('message_content');",                                           
                'id'=>'del_send_check',
                'onclick'=>'changeToProgressBar( 'search_spinner_send_check ', 'del_send_check ');',
                'class'=>'block');
                
            echo $html->image('spinner.gif', array('alt'=>'Spinner', 'id'=>'search_spinner_send_check', 'class'=>'none')).
                 $ajax->submit('удалить отмеченные', $options); ?>  
   </td>
</tr>
</table>      
</form>  
 

Спустя 33 минуты, 33 секунды (3.08.2006 - 11:50) vasa_c написал(а):
Ну...
А как он обновляется то?
Приведи клиентский код, где создаются эти самые объекты.

Спустя 1 час, 5 минут, 22 секунды (3.08.2006 - 12:55) omcrew написал(а):
 
...
 
<script type="text/javascript">new PeriodicalExecuter(function() {new Ajax.Updater('send_table','/gui/messages/refresh_outbox', {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', 'send_table']})}, 3)</script> 
 
...
 
<form onsubmit="return false;">
<table>
 
  <tr>
 
    <td class="msg-name">Голованов Александр</td>
    <td class="msg-date">Вчера, 15:17<input type="hidden" name="data[Message][check_send_11]"  value="-1" id="MessageCheckSend11_" /><input type="checkbox" name="data[Message][check_send_11]" onclick="toggleCheckSend('11')" id="MessageCheckSend11" /></td>
    <script>    
        checkSend(11);
    </script>
  </tr>
  <tr>
    <td class="msg-subject"><a href="/gui/messages/#view"  onclick="new Ajax.Updater('message_content','/gui/messages/view_outbox/11', {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', 'message_content']}); return false;">nmnmnmn</a></td>
    <td class="msg-action">
 
    	<a href="/gui/messages/#send_11"  id="send_11" onclick="changeToProgressBar('search_spinner_send_11','send_11');" class="block">удалить</a><script type="text/javascript">Event.observe($('send_11'), 'click', function(event){ new Ajax.Request('/gui/messages/delete_out/11', {onComplete:function(request){var apear2 = new Effect.Appear('message_content');}, asynchronous:true, evalScripts:true}) }, false);</script>    </td>
  </tr>
  <tr>
    <td class="msg-name">Голованов Александр</td>
    <td class="msg-date">Вчера, 15:17<input type="hidden" name="data[Message][check_send_10]"  value="-1" id="MessageCheckSend10_" /><input type="checkbox" name="data[Message][check_send_10]" onclick="toggleCheckSend('10')" id="MessageCheckSend10" /></td>
    <script>    
        checkSend(10);
    </script>
 
  </tr>
  <tr>
    <td class="msg-subject"><a href="/gui/messages/#view"  onclick="new Ajax.Updater('message_content','/gui/messages/view_outbox/10', {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', 'message_content']}); return false;">7878</a></td>
    <td class="msg-action">
    	<a href="/gui/messages/#send_10"  id="send_10" onclick="changeToProgressBar('search_spinner_send_10','send_10');" class="block">удалить</a><script type="text/javascript">Event.observe($('send_10'), 'click', function(event){ new Ajax.Request('/gui/messages/delete_out/10', {onComplete:function(request){var apear2 = new Effect.Appear('message_content');}, asynchronous:true, evalScripts:true}) }, false);</script>    </td>
  </tr>
  <tr>
 
 
<tr>
   <td>
            <input type="submit" id="del_send_check" onclick="changeToProgressBar('search_spinner_send_check','del_send_check');" class="block" value="удалить отмеченные" /><script type="text/javascript">Event.observe("del_send_check", 'click', function(event){ new Ajax.Updater('message_content','/gui/messages/delete_out_check/', {asynchronous:true, evalScripts:true, parameters:Form.serialize(Event.element(event).form), requestHeaders:['X-Update', 'message_content']}) }, false);</script>  
   </td>
</tr>
</table>  
 
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.