Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Надежность ajax
 
 автор: Владимир55   (04.11.2009 в 21:16)   письмо автору
 
 

В админке есть несколько кнопок, запускающих скрипт в разных режимах, причем все запуски протоколируются путем занесения соответствующих записей в текстовый файл. При анализе протокола обнаруживается удивительная вещь: запуски происходят не только от клика на кнопку, но даже в тот момент времени, когда я не нижимаю никаких кнопок и даже когда меня нет комнате! Проходит полчаса-час работы, и самопроизвольно проходит повторный сигнал пуска, начинающий работу скрипта с исходного состояния. Самопроизвольного запуска я не обнаружил, а вот повторные пуски отмечены.

Работа на Денвере. Других запущенных программ нет.

Как можно устранить это явление?

<script src="jquery.min.js"></script>
<script>
function starter(file)
{
$.get(file+".php");
}
</script>
<input type="button" onclick="starter(‘31’)" value="Пуск-1" />

<input type="button" onclick="starter(‘32’)" value="Пуск-2" />

  Ответить  
 
 автор: AlexSol   (04.11.2009 в 22:32)   письмо автору
 
   для: Владимир55   (04.11.2009 в 21:16)
 

если это полный код ищите проблему в другом месте.
здесь четко прописано - запуск по клику и никак подругому

  Ответить  
 
 автор: Владимир55   (04.11.2009 в 22:45)   письмо автору
 
   для: AlexSol   (04.11.2009 в 22:32)
 

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

  Ответить  
 
 автор: АЯ   (05.11.2009 в 06:52)   письмо автору
 
   для: Владимир55   (04.11.2009 в 22:45)
 

Окропите компьютер святым пивом :-)

  Ответить  
 
 автор: coloboc66   (05.11.2009 в 12:18)   письмо автору
 
   для: АЯ   (05.11.2009 в 06:52)
 

1. Замените setTimeout на SetInterval.
2. Переделайте код так, чтобы работал только один экземпляр аякса.
У меня были аналогичные проблемы, когда я писал чат на аяксе. Но я их устранил вышеприведенными способами.

  Ответить  
 
 автор: Владимир55   (05.11.2009 в 14:05)   письмо автору
 
   для: coloboc66   (05.11.2009 в 12:18)
 

setTimeout на SetInterval заменен. Получилось так:

<?php

echo <<<TEXT
<div id="res"> </div>
<script src="jquery.min.js"></script>
<script>
function to_ajax(arg)
{
$.get(arg+".txt", function(data)
{
$('#res'+arg).html("  " + data);
var t=SetInterval(function() {to_ajax(arg)},10000);
});
}

$(document).ready(function(){

to_ajax('n_text_prin')
to_ajax('n_text_vse')
to_ajax('start')
to_ajax('max_sovp')
to_ajax('brak')
to_ajax('vrem')
});

</script>

TEXT;



echo 
'
<div id="res">  </div>
<script>
function start_ajax_1()
{
$.get("format-3a.php?kol=' 
$zakaz '");
}
</script>


<script>
function start_ajax_2()
{
$.get("format-3a.php?kol=10000000");
}
</script>

<script>
function start_ajax_3()
{
$.get("format-3s.php");
}
</script>'
;

    
// В реальном скрипте нижеследующие параметры разбросаны по странице, 
                     // но встречаются в такой последовательности:

echo '
<span id="resvrem">@6</span>
<input type="button" onclick="start_ajax_1()" value="' 
$zakaz '" />
<input type="button" onclick="start_ajax_2()" value=" Все " />
<span id="resn_text_vse">@2</span>
<span id="resn_text_prin">@1</span>
<input type="button" onclick="start_ajax_3()" value="Стоп" />
<span id="resstart">@3</span>
<span id="resmax_sovp">@4</span>
<span id="resbrak">@5</span>'
;


Это соответствует понятию "только один экземплят аякса"?
И вообще, это нормально?

  Ответить  
 
 автор: coloboc66   (05.11.2009 в 15:14)   письмо автору
 
   для: Владимир55   (05.11.2009 в 14:05)
 

Нет, у вас должна быть только одна ф-я start_ajax(par), вызываемая с разными параметрами (format-3a.php...)
var t=SetInterval(function() {to_ajax(arg)},10000); - это нужно вынести из тела функции в событие клика кнопки или онлоад астраницы.
И вообще нужно смотреть и тестировать. Аякс начинает глючить из-за того, что новый экземпляр аякса запускается, а старый не останавливается, а у вас этих экземпляров аж ЧЕТЫРЕ!!! Поэтому я и говорю, что должен быть только один экземпляр, запускаемый каждый раз с раными параметрами.

  Ответить  
 
 автор: Владимир55   (05.11.2009 в 16:59)   письмо автору
 
   для: coloboc66   (05.11.2009 в 15:14)
 

Я вот чего не пойму: как это у меня четыре экземпляра?

Управляющих команд запуска внешнего файла - три.
Опрос содержимого файла - шесть.

Что считается экземпляром?

  Ответить  
 
 автор: coloboc66   (05.11.2009 в 17:46)   письмо автору
 
   для: Владимир55   (05.11.2009 в 16:59)
 

У вас три функции start_ajax и одна to_ajax . И в каждой из них вызывается новый аякс. Экземпляр - это каждый очередной вызов аякса. Сначала вместо трёх start_ajax сделайте одну, и вызывайте её с разными параметрами, примерно так:
function start_ajax(par) 

$.get(par); 
}

<input type="button" onclick="start_ajax('format-3a.php?kol=' . $zakaz . ')" value="' . $zakaz . '" /> 
<input type="button" onclick="start_ajax('format-3a.php?kol=10000000')" value=" Все " /> 
<span id="resn_text_vse">@2</span> 
<span id="resn_text_prin">@1</span> 
<input type="button" onclick="start_ajax('format-3s.php')" value="Стоп" />

И to_ajax(arg) тоже вызывайте нормально - событием, например:
<body onload="setInterval(to_ajax(arg),10000)" >

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования