在卸载时通过Ajax运行PHP

时间:2009-08-19 04:01:08

标签: javascript php ajax onbeforeunload

当用户导航离开页面时,我正在尝试运行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的事件,但如果它仍然可用,我无法弄清楚如何让它工作。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

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