AJAX 및 페이지를 떠나는 사용자
저는 채팅 작업을 하고 있으며 사용자가 페이지를 떠났는지 여부를 탐지할 수 있는 방법을 찾고 있습니다.프런트 엔드가 엉망이 되는 것을 방지하기 위해 데이터베이스에서 거의 모든 것을 처리하고 있습니다.
그래서 제가 하려고 하는 것은 어떤 이유로든 페이지가 남겨지면(창 닫기, 다른 페이지로 이동, 링크 클릭 등), 사용자가 떠나기 전에 Ajax 호출이 실행되어 데이터베이스를 업데이트할 수 있도록 하는 것입니다.
이것이 제가 시도한 것입니다.
$(window).unload(function(){
$.post("script.php",{key_leave:"289583002"});
});
이상한 이유로 작동하지 않고, php 코드를 확인해보니 정상적으로 작동합니다.좋은 의견이라도 있나?
사용해 보십시오.
$(window).unload(function(){
$.ajax({
type: 'POST',
url: 'script.php',
async:false,
data: {key_leave:"289583002"}
});
});
참고:async:false
브라우저가 요청이 완료될 때까지 기다리는 방식입니다.
사용.$.post
비동기식이므로 브라우저가 스크립트 실행을 중지하기 전에 요청이 충분히 빠르지 않을 수 있습니다.
이건 올바른 방법이 아닙니다OS가 중단되거나 브라우저 프로세스에서 문제가 발생하면 이 이벤트가 실행되지 않습니다.그리고 사용자가 언제 떠났는지 알 수 없으며, 연결이 끊긴 후에도 온라인 상태로 표시됩니다.이것 대신에, 여러분이 할 수 있는 것은.
- 소켓 연결을 시도하여 소켓 연결이 끊어졌을 때 사용자의 연결이 끊어졌음을 알 수 있습니다.
- 사용자가 여전히 연결되어 있음을 알 수 있도록 서버에 요청을 보낼 수 있습니다(예: 1초 후).2초가 지나도 요청을 받지 못한 경우 사용자의 연결을 끊습니다.
$.post 뒤에 팝업("이렇게 일찍 나가나요?")을 추가합니다.효과가 있을지도 모릅니다.사용자 환경이 좋지 않을 수 있습니다.:)
이것은 위의 답변과 관련이 있습니다.https://stackoverflow.com/a/10272651/1306144
그러면 1초마다 Ajax 호출이 실행됩니다. (1000)
function callEveryOneSec() {
$jx.ajax({}); // your ajax call
}
setInterval(callEveryOneSec, 1000);
그unload
이벤트는 페이지를 떠나는 사용자를 탐지하지 않는 것이 좋습니다.MDN에서:
개발자는 언로드 이벤트를 사용하지 않아야 합니다...특히 모바일에서는 언로드 이벤트가 안정적으로 발생하지 않습니다.
대신 이벤트 사용document
및/또는 이벤트window
(자세한 내용은 링크 참조).예:
document.addEventListener('visibilitychange', function() {
if (document.visibilityState === 'hidden') {
$.ajax({
type: 'POST',
url: 'script.php',
async:false,
data: {key_leave: "289583002"}
});
}
});
또한 소량의 분석 데이터를 서버로 전송하기 위해 특별히 설계된 를 사용하는 것이 좋습니다.
document.addEventListener('visibilitychange', function() {
if (document.visibilityState === 'hidden') {
navigator.sendBeacon('script.php', {key_leave: "289583002"});
}
});
언급URL : https://stackoverflow.com/questions/10272561/ajax-and-user-leaving-a-page
'programing' 카테고리의 다른 글
Spring Boot Repository와 DAO의 API 비교 (0) | 2023.08.23 |
---|---|
스위프트의 2차원 배열 (0) | 2023.08.23 |
Javascript를 사용하여 메타 새로 고침 태그 재정의 또는 비활성화 (0) | 2023.08.23 |
빌드 프로세스가 없는 Vue.js 단일 파일 구성 요소 (0) | 2023.08.23 |
Rails 확인란 AJAX 호출, 아무것도 렌더링하지 않음 (0) | 2023.08.23 |