Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > не успевает выполниться функция


Автор: zmaxik 12.8.2009, 16:10
есть функция myfunc() которая должна сработать, до того как пользователь обновляет страницу

но так она не срабатывает, попросту не успевает

[/code]
Код

window.onbeforeunload = function() {
 myfunc();
}



работает только со спасительным alert('s') в конце. Когда он загружается, функция как раз успевает выполниться

но, как сами понимаете, требуется без него

спасибо

Автор: IDVsbruck 12.8.2009, 20:13
а) такого события, соторое бы сработало "в связи с перегрузкой", нет;
б) это неправильно и нелогично с любой точки зрения - пользователь хочет перегрузить и он должен иметь такую возможность сделать когда хочет;
в) если необходимы действия, которые накладывают ограничение на различия в контенте до и после перегрузки, необходимо предусматривать такие действия на сервере;
г) полноценно сделать то, что ты хочешь, можно только переписав браузер (то есть на отдельно взятой машине).

Так что трактуй задачу по-другому: чего ты хочешь добиться ...

Автор: zmaxik 13.8.2009, 15:07
есть функция, которая должна выполниться когда пользователь нажмет покинуть или обновить страницу

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

Автор: rabbitObject 13.8.2009, 15:27
zmaxik, попробуй так:

Код


document.body.onunload = function () {
    alert("!"); // тут любой код
}


или просто
Код

<script>
function myfunc() {
    // code
}
</script>
<body onunload="myfunc">

выполняется перед выгрузкой страницы (рефреш, переходе на другую страницу и даже при закрытии браузера) 

Автор: zmaxik 13.8.2009, 19:43
первая функция не работает, вторая как и моя - через алерт

Автор: zmaxik 16.8.2009, 18:04
что никто не знает больше?

Автор: rabbitObject 17.8.2009, 11:26
zmaxik, можно код посмотреть?

Автор: zmaxik 18.8.2009, 09:28
вот часть кода

Код

function myfunc(){
    var params = "action=lalala";
    var Ajax = new Ajax.Request(
    "/index.php", 
    {
        method: 'post', 
        parameters: params, 
        onComplete: isSaved
    });
}

window.onbeforeunload = function() {
 myfunc();
}

Автор: zmaxik 20.8.2009, 10:26
???

Автор: rabbitObject 20.8.2009, 13:17
попробуй использовать синхронный ajax вызов, чтобы дождаться ответа сервера.

Автор: zmaxik 20.8.2009, 19:14
сорри, но я новичок))

Автор: zmaxik 21.8.2009, 09:12
как мне получить ответ от сервера и с помощью него сделать так чтобы функция выполнилась?

Автор: zmaxik 24.8.2009, 11:52
без апов никто не ответит чтоли? :(

Автор: bars80080 24.8.2009, 14:05
да ответили бы давно, если бы вопрос был задан нормально.

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

так ли?

Автор: zmaxik 24.8.2009, 17:00
да, именно так

Автор: bars80080 24.8.2009, 17:14
вот видите, как оказывается можно формулировать вопросы. всего одна строчка, а выражает истинную суть проблемы. тогда бы вам не писали десять маловразумительных постов, а сразу бы сказали, что 100%-го способа реализовать это не существует из-за принципа отношений клиент-сервер. практически всегда это строится (и на этом форуме тоже) следующим образом. при посещении каждому пользователю прописывается время в БД его последнего посещения, и при показе пользователя просто просчитываете, как давно это было. на этом форуме статус on-line присваивается пользователю, если он был здесь не более 15-ти минут назад.
так делается фактически везде

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

Автор: zmaxik 24.8.2009, 18:11
вот именно потому что не хочется интервально отправлять данные на сервер, и пытаюсь сделать этот скрипт
Вы, bars80080, мне опять ничего нового не открыли

вопрос был, можно как-нибудь сделать так, чтобы функция успела выполниться вот и всё
хотелось бы выслушать других, особенно rabbitObject
спасибо

Автор: bars80080 24.8.2009, 23:53
Цитата(zmaxik @  24.8.2009,  18:11 Найти цитируемый пост)
мне опять ничего нового не открыли

значит плохо читаете


Цитата(zmaxik @  24.8.2009,  18:11 Найти цитируемый пост)
опрос был, можно как-нибудь сделать так, чтобы функция успела выполниться вот и всё

вторая строчка, разжёвываю:
никаким способом вы не сумеете создать 100%-ный способ (а по прикидкам, даже хотя бы 70%), который позволял бы вам реализовать выполнение некоторого события, когда пользователь закрывает браузер.
не те технологии, понимаете?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)