使用AJAX的简单访问持续时间记录器

时间:2013-08-02 16:48:14

标签: php javascript ajax events get

我在登录访问时间方面遇到问题。

我写了这样的测试html文件:

<!DOCTYPE html>
<html>
    <body>
        <script language="JavaScript" type="text/javascript">

            function enter() {
                this.chrono = new Date().getMilliseconds();
                alert("test");
            }

            function leave() {
                this.chrono = new Date().getMilliseconds() - this.chrono;

                var myAjax = new Ajax.Request('visitor_log/ajax_store_visit_duration.php?visit_duration=' + this.chrono.toString(),{
                        method: 'get',
                        onComplete:handlerFunction
                });

                return null;
            }

            window.onload = enter;
            window.onbeforeunload = leave;
        </script>
    </body>
</html>

PHP文件(visitor_log / ajax_store_visit_duration.php):

<?php

if(isset($_GET["visit_duration"]))
{
    $text = $_GET["visit_duration"];

    log($text);
}
else die("error");

function log($text)
{
    $myFile = "test.txt";
    $fh = fopen($myFile, 'wb');
    fwrite($fh, $text);
    fclose($fh);
}

?>

当我输入浏览器时:

http://localhost/visitor_log/ajax_store_visit_duration.php?visit_duration=123

它会根据需要创建文本文件,但似乎onbeforeunload事件中的AJAX调用无效。

我的代码出了什么问题?


编辑:

我创建了测试函数来查找AJAX调用的问题。

             

        function testajax(){
            this.chrono = new Date().getMilliseconds() - this.chrono;

           var blockingRequest = new XMLHttpRequest();
            blockingRequest.open("GET", "visitor_log/ajax_store_visit_duration.php?visit_duration=" + 123, false); // async = false
            blockingRequest.send();

            return null;
        }

        window.onload = testajax;
    </script>
</body>

这也不行。

1 个答案:

答案 0 :(得分:0)

好的,故意不使用jQuery:

这是PHP:

<?php

function loggit($text) {
    $myFile = "/tmp/test.txt";
    $fh = fopen($myFile, 'wb');
    fwrite($fh, $text);
    fclose($fh);
}

if(isset($_GET["visit_duration"])) {
    $text = $_GET["visit_duration"];
    loggit($text);
}
else die("error");

?>

这是HTML:

<!DOCTYPE html>
<html>
<body>
<script language="JavaScript" type="text/javascript">

    function enter() {
        this.chrono = new Date().getMilliseconds();
    }

    function leave() {
        this.chrono = new Date().getMilliseconds() - this.chrono;

        alert("test" + this.chrono);

    var blockingRequest = new XMLHttpRequest();
    blockingRequest.open("GET", "http://localhost/_TempFiles/temp.php?visit_duration=" + this.chrono.toString(), false); // async = false
    blockingRequest.send();

        return null;
    }

    window.onload = enter;
    window.onbeforeunload = leave;
</script>
</body>
</html>

你想使用异步请求(请参阅false发送到blockingrequest.open) - 但要注意这是一个BLOCKING请求(因此名称)。

我还改变了#34; log&#34;的PHP功能名称。 to&#34; loggit&#34; log是php自然对数函数...