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" isn't going to work in every browser. like chacha102 says, you need to make sure the PHP script isn't stopping the second the request is terminated - ignore_user_abort() is a good way to make sure of this.

additionally, you might want to try something simpler. injecting an image into the page to spark the request might be all you need to do.

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 に答える