Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Problem z unload, onUnload i onBeforeUnload
Forum PHP.pl > Forum > Przedszkole
Kużdo
Witam,

Chciałem zrobić sobie zliczanie pobytu gości(!) na stronie, którzy weszli z linka PP. Dostają oni unikalne ciasteczko i dla nich dodawane jest do części head skrypt JS, który przy unload otwiera po ajaxie połączenie do pliku php i tak zliczam czas pobytu na stronie. Problem z tym, że Chrome nie obsługuje funkcji unload() z jQuery... Nie potrafię pisać w czystym JS i mam problem jak rozwiązać to :/ W tej chwili trochę przerobiłem skrypt, ale nie działa on teraz i w Operze i w Chrome :/

  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3. if($.browser.chrome) {
  4. window.onbeforeunload = function(){
  5. $.ajax({
  6. type: "POST",
  7. url: "plik.php",
  8. data: "cookie='.$_COOKIE['hash'].'"
  9. });
  10. };
  11. } else {
  12. $(window).unload(function(){
  13. $.ajax({
  14. type: "POST",
  15. url: "plik.php",
  16. data: "cookie='.$_COOKIE['hash'].'"
  17. });
  18. });
  19. }
  20. });


Może ktoś wie jak to rozwiązać? Może inny sposób zliczania pobytu?
bpskiba
W poniższym skrypcie dostosuj ścieżki.
Według http://www.w3schools.com/jsref/event_onunload.asp powinno działać wszędzie.
  1. <script src="jquery.js"></script>
  2. <script LANGUAGE="JavaScript" TYPE="text/javascript">
  3. function f()
  4. {
  5. $.ajax({
  6. type: "POST",
  7. url: "plik.php",
  8. data: "cookie='.$_COOKIE['hash'].'"
  9. });
  10. }
  11. </head>
  12. <body onUnload="f()">
  13. treść strony
  14. </body></html>
Niktoś
Nie powinno być
[JAVASCRIPT] pobierz, plaintext
  1. data: "cookie="+<?php '.$_COOKIE['hash'].' ?>
[JAVASCRIPT] pobierz, plaintext

zamiast:
[JAVASCRIPT] pobierz, plaintext
  1. data: "cookie='.$_COOKIE['hash'].'"
[JAVASCRIPT] pobierz, plaintext


Mam pewne wątpliwości ,czy w taki sposób jaki zaprezentowałeś, można mieszać dane.Blok JS to nie blok PHP, więc jeśli się nie mylę to $_COOKIE['hash'] będzie błędnie interpretowany w skrypcie js .
Kużdo
Tak jak napisałem, część ta jest dodawana przez skrypt tylko dla wybranych osób. Więc zmienna z PHP jest tutaj wrzucana i dopiero leci do usera dokument, już z normalną wartością.

Co do skryptu: niestety, ale i Opera i Chrome opierają się temu.
satanek
Spróbuj dla chrome/opery ustawić typ zapytania na synchroniczny:

Kod
if($.browser.chrome) {
            window.onbeforeunload = function(){
                $.ajax({
                    type: "POST",
                    async: false,
                    url: "plik.php",
                    data: "cookie='.$_COOKIE['hash'].'"
                });
            };
        }


Nie testowane, ale istnieje szansa że zadziała smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.