Ajax发布onbeforeunload不起作用

时间:2012-05-19 14:14:34

标签: javascript jquery ajax

此代码将鼠标移动坐标存储在数组中,并应将其发布到onbeforeunload。但它没有发布。如果我改变

名称:移动

名称:“blabla”

它有效。意味着问题出在“移动”变量上。我怎样才能让它发挥作用?

$(document).ready(function(){


var moves = [];

$("html").mousemove(function(e){
moves.push(e.pageX + "x" + e.pageY) 
});


window.onbeforeunload = function() {

$.ajax({

      type: "POST",
      url: "mailyaz.php",
      data: {
      name: moves;
      }
      });

});

});

2 个答案:

答案 0 :(得分:2)

你可以试试这个。 这是我几个月前开发的一个小例子。 在这种情况下,坐标存储在文本文件中,但您可以将其替换为INSERT到数据库中。

在客户端上放了这个:

    var moves = ""; //Now an String to store the Coords

    $(document).ready(function(){
        //When you moves the mouse inside the Page then 
        //concat the Coords into the String var and add a Line-Brak at the end
        $("html").mousemove(function(e){
            moves += (e.pageX + " x " + e.pageY + "\n");

        });

        //Here the magic happen: bind a function to onbeforeunload event that POST
        //the String to the server
        $(window).bind('beforeunload', function() {

            $.post("server.php",{name:moves});

        }); 

    });

现在您需要服务器端的一个名为server.php的页面,其中包含

    //Capture the String
    $cursorMoves = ($_POST['name']);

    $myFile = "testFile.txt";
    $fh = fopen($myFile, 'w');
    fwrite($fh, $cursorMoves);
    fclose($fh);

答案 1 :(得分:1)

onbeforeunload必须返回一个字符串。但是,ajax请求将被显示的对话框阻止。如果用户接受并离开页面,则可能会中断请求。

https://developer.mozilla.org/en/DOM/window.onbeforeunload

http://jsfiddle.net/sVU7K/1