|
|
|
| В админке есть несколько кнопок, запускающих скрипт в разных режимах, причем все запуски протоколируются путем занесения соответствующих записей в текстовый файл. При анализе протокола обнаруживается удивительная вещь: запуски происходят не только от клика на кнопку, но даже в тот момент времени, когда я не нижимаю никаких кнопок и даже когда меня нет комнате! Проходит полчаса-час работы, и самопроизвольно проходит повторный сигнал пуска, начинающий работу скрипта с исходного состояния. Самопроизвольного запуска я не обнаружил, а вот повторные пуски отмечены.
Работа на Денвере. Других запущенных программ нет.
Как можно устранить это явление?
<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" />
|
| |
|
|
|
|
|
|
|
для: Владимир55
(04.11.2009 в 21:16)
| | если это полный код ищите проблему в другом месте.
здесь четко прописано - запуск по клику и никак подругому | |
|
|
|
|
|
|
|
для: AlexSol
(04.11.2009 в 22:32)
| | Я подумал, что, может быть, у браузера есть какие-ниудь переходные процессы, сомоорганизация типа виндовса, или ещё чего в этом роде, когда возможны кратковременные непредсказуемые действия. | |
|
|
|
|
|
|
|
для: Владимир55
(04.11.2009 в 22:45)
| | Окропите компьютер святым пивом :-) | |
|
|
|
|
|
|
|
для: АЯ
(05.11.2009 в 06:52)
| | 1. Замените setTimeout на SetInterval.
2. Переделайте код так, чтобы работал только один экземпляр аякса.
У меня были аналогичные проблемы, когда я писал чат на аяксе. Но я их устранил вышеприведенными способами. | |
|
|
|
|
|
|
|
для: 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>';
|
Это соответствует понятию "только один экземплят аякса"?
И вообще, это нормально? | |
|
|
|
|
|
|
|
для: Владимир55
(05.11.2009 в 14:05)
| | Нет, у вас должна быть только одна ф-я start_ajax(par), вызываемая с разными параметрами (format-3a.php...)
var t=SetInterval(function() {to_ajax(arg)},10000); - это нужно вынести из тела функции в событие клика кнопки или онлоад астраницы.
И вообще нужно смотреть и тестировать. Аякс начинает глючить из-за того, что новый экземпляр аякса запускается, а старый не останавливается, а у вас этих экземпляров аж ЧЕТЫРЕ!!! Поэтому я и говорю, что должен быть только один экземпляр, запускаемый каждый раз с раными параметрами. | |
|
|
|
|
|
|
|
для: coloboc66
(05.11.2009 в 15:14)
| | Я вот чего не пойму: как это у меня четыре экземпляра?
Управляющих команд запуска внешнего файла - три.
Опрос содержимого файла - шесть.
Что считается экземпляром? | |
|
|
|
|
|
|
|
для: Владимир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)" >
|
| |
|
|
|