programing

페이지 언로드에 JQuery가 포함된 Ajax 요청

iphone6s 2023. 2. 21. 23:32
반응형

페이지 언로드에 JQuery가 포함된 Ajax 요청

나는 이것을 하려고 한다:

$(window).unload( function () { 

$.ajax({
    type: "POST",
    url: "http://localhost:8888/test.php?",
    data: "test",
    success: function(msg){
         alert( "Data Saved: " + msg );
    }
}); 
alert (c);
});

단, 성공경보는 표시되지 않으며 이 요구는 서버에 도달하는 것조차 보이지 않습니다.내가 뭘 잘못하고 있지?

대신 (기본적으로는 비동기)를 사용하여 요청을 동기화할 필요가 있다고 생각합니다.async : false파라미터를 지정합니다.

동기 요청은 완료될 때까지 브라우저를 잠급니다.요청이 비동기일 경우 페이지는 계속 언로드됩니다.그 요청은 발동할 시간조차 없을 정도로 충분히 빠르다.

비동기 = false를 사용하여 호출해 보십시오.

jQuery.ajax({url:"http://localhost:8888/test.php?", async:false})

그냥 해봤어요.

가장 좋은 해결책은 navigator.sendBeacon을 사용하는 것입니다.이것은 브라우저의 새로운 릴리스에서 구현되기 시작한 새로운 기능입니다.이 기능은 Chrome 39 및 Firefox 31보다 새로운 브라우저에서 사용할 수 있습니다.쓰기 시 Internet Explorer 및 Safari에서는 지원되지 않습니다.아직 새로운 기능을 지원하지 않는 브라우저에서 요청이 전송되도록 하려면 다음 솔루션을 사용할 수 있습니다.

var navigator.sendBeacon = navigator.sendBeacon || function (url, data) {
  var client = new XMLHttpRequest();
  client.open("POST", url, false); // third parameter indicates sync xhr
  client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
  client.send(data);
};

단, 이 함수에서는 온성공 콜백을 등록할 수 없습니다.

HTML 5 사양에는 다음과 같이 기술되어 있습니다.alert(),prompt(), 등은 다음 기간 동안 사용할 수 없습니다.window.unload()이벤트. 자세한 내용은 window.unload()참조하십시오.결과를 확인할 수식을 확인할 수 있습니다.console.log('success');대신alert().

이 기능을 사용하면 더 많은 성공을 거둘 수 있을 것입니다.onbeforeunload이벤트요?

   $(window).bind('beforeunload', ...

당신의 기능과 Ajax 콜은 정상인 것 같습니다.따라서 제 추측으로는 Ajax 콜이 서버에 접속하고 돌아오기 전에 브라우저 창이 닫힙니다.창이 닫힐 때 Ajax 콜이 무언가를 반환할 수 있습니다.이 경우 에러 함수를 Ajax 콜에 추가해 보겠습니다.

error: function (xhr, textStatus) {
    alert('Server error: '+ textStatus);
}

MDN은 이벤트 사용을 권장합니다.

$(window).on("visibilitychange", (event) => {
    if (document.visibilityState === 'hidden') {
        navigator.sendBeacon("https://example.com/endpoint", yourDataToSend);
    }
});

(jquery 이외의 버전에서는window.addEventListener("visibilitychange").)

MDN에서:

웹 사이트에서는 사용자가 페이지를 완료하면 서버에 분석 또는 진단을 보내려고 하는 경우가 많습니다.이 작업을 수행하는 가장 신뢰할 수 있는 방법은 데이터 전송 경로로 데이터를 전송하는 것입니다.visibilitychange이벤트

및 이벤트 사용은 피해야 합니다.

이 SO 포스트는 이 상황에 대한 조사도 잘 되어 있는 것 같습니다.

언급URL : https://stackoverflow.com/questions/1821625/ajax-request-with-jquery-on-page-unload

반응형