2

当用户离开页面时,我试图运行一个 php 脚本。这是我目前正在使用的:

function unload(){
var ajaxRequest;  // The variable that makes Ajax possible!

try{
    // Opera 8.0+, Firefox, Safari
    ajaxRequest = new XMLHttpRequest();
} catch (e){
    // Internet Explorer Browsers
    try{
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try{
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){
            // Something went wrong
            window.location = "unsupported.html";
            return false;
        }
    }
}

ajaxRequest.open("GET", "ajax/cancelMatch.php", true);
ajaxRequest.send(null); 
}

通过FireBug,看起来是在调用ajaxRequest对象的open函数,但是PHP没有运行!这与它在页面卸载时调用它的事实有关吗?

另外,我发现了一个名为 onbeforeunload 的事件,但我不知道如何让它工作,如果它仍然可用的话。

4

2 回答 2

4

“onbeforeunload”并非在每个浏览器中都有效。就像 chacha102 所说,您需要确保 PHP 脚本不会在请求终止的第二秒停止 -ignore_user_abort()这是确保这一点的好方法。

此外,您可能想尝试一些更简单的方法。将图像注入页面以激发请求可能就是您需要做的所有事情。

function onunload() { 
  var i = document.createElement("img");
  i.src = "ajax/cancelMatch.php?" + Math.random();
  document.appendChild(i);
  return;
}
于 2009-08-19T04:09:07.037 回答
2

您需要确保ignore_user_abort()尽快将其设置为 true。如果有一个默认设置,那就更好了。

于 2009-08-19T04:02:49.187 回答