2009-08-19 4 views
2

사용자가 페이지에서 벗어날 때 PHP 스크립트를 실행하려고합니다. 그것은 ajaxRequest 객체의 open 함수를 호출하는 것처럼 방화 광 통해언로드시 Ajax를 통해 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); 
} 

, 그것은 보이는,하지만 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로 설정된 경우에도 사용자가 계속 페이지를 떠날 수 있습니까? 아니면 모두 함께 멈추고 그것들을 지키겠습니까? 그리고 왜 PHP를 이미지 src를 삽입하여 실행할 수 있다면 Ajax를 사용하고 있습니까? 정확히 같은 방식으로 작동합니까, 아니면 Ajax에 혜택이 있습니까? 감사합니다. – GuyNoir

+0

오, ignore_user_abort()에 대한 질문을 무시하십시오. PHP가 아니라 JS 플래그라고 가정했습니다. – GuyNoir

+1

XMLHttp 메서드의 유일한 이점은 결과를 다시 얻을 수 있다는 것입니다.이 경우 결과가 필요하지 않습니다. 그래서, 당신은 단지 이미지를 주입 할 수 있습니다. 그리고 예, ignore_user_abort()는 사용자가 연결을 닫으면 실행을 중단하지 않도록 PHP에 알려줍니다. – Tyson

관련 문제