2009-08-19 76 views
2

运行通过Ajax一个PHP我想,当用户导航离开该页面有一个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); 
} 

通过萤火,它看起来是调用ajaxRequest对象的开放的功能,但是PHP不运行!这是否与它在卸载页面时调用它有关?

此外,我发现一个名为onbeforeunload的事件,但我无法弄清楚如何使它工作,如果它仍然可用。

回答

2

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

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; 
} 
+0

好的。如果ignore_user_abort()设置为true,它是否仍然允许用户继续离开页面?或者会将它们全部阻止并保持在上面? 我为什么要使用Ajax,如果我可以通过注入图片src运行PHP的赫克?它是否以完全相同的方式工作,或者对Ajax有益处? 谢谢。 – GuyNoir 2009-08-19 04:27:48

+0

呵呵,忽略关于ignore_user_abort()的问题。我认为这是一个JS标志而不是PHP。 – GuyNoir 2009-08-19 04:28:42

+1

XMLHttp方法的唯一好处是可以返回结果 - 在这种情况下,您不需要任何结果。所以,你可以注入一个图像。是的,如果用户关闭连接,ignore_user_abort()会告诉PHP不会中止执行。 – Tyson 2009-08-19 05:02:10