Javascript 卸载时通过Ajax运行PHP
我试图在用户离开页面时运行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{
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不要中止执行。