Javascript 卸载时通过Ajax运行PHP

Javascript 卸载时通过Ajax运行PHP,javascript,php,ajax,onbeforeunload,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{

我试图在用户离开页面时运行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的事件,但如果它仍然可用,我不知道如何使它工作。

您需要确保
忽略用户中止()
尽快设置为true。如果有一个默认设置,那就更好了。

“onbeforeunload”不会在每个浏览器中都起作用。正如chacha102所说,您需要确保PHP脚本不会在请求终止时立即停止-
ignore\u user\u abort()
是确保这一点的好方法

此外,您可能希望尝试更简单的方法。您可能只需要在页面中注入一个图像来激发请求

function onunload() { 
  var i = document.createElement("img");
  i.src = "ajax/cancelMatch.php?" + Math.random();
  document.appendChild(i);
  return;
}

可以如果ignore_user_abort()设置为true,是否仍允许用户继续离开页面?还是会一起阻止他们,让他们继续?如果我可以通过注入一个图像src来运行php,那我为什么要使用Ajax呢?它是以完全相同的方式工作的,还是Ajax有一个优点?谢谢。哦,忽略关于ignore\u user\u abort()的问题。我假设它是一个JS标志,而不是PHP。XMLHttp方法的唯一好处是您可以返回一个结果——在这种情况下,您不需要任何结果。所以,你可以只注入一个图像。是的,如果用户关闭连接,ignore_user_abort()会简单地告诉PHP不要中止执行。