programing

언로드 이벤트를 사용하여 Ajax 요청을 확실하게 실행할 수 있습니까?

elseif 2023. 3. 25. 10:53

언로드 이벤트를 사용하여 Ajax 요청을 확실하게 실행할 수 있습니까?

사용자 편집 세션을 감시하는 방법이 필요합니다.또한 검토 중인 솔루션 중 하나에서unloadevent: 서버에 편집 세션의 종료를 알리는 Ajax 요청을 보냅니다.('편집 경합을 방지하기 위한 사용자 세션 모니터링' 참조)

에 대한 나의 (어느 정도 제한적) 읽기unload이벤트는 이 핸들러에 연결된 코드가 빠르게 실행되어야 함을 나타냅니다.따라서 보통 메모리 누수를 방지하기 위해 객체를 클리어하기 위해 사용됩니다.

질문입니다.이것이이 목적에충분히충분히충분히실현할수있을까요?

추신. 나는 그 일을 알고 있다.async: false선택.

서버가 응답할 수 있을 정도로 빠른 경우 이 방법은 매우 안정적입니다.하지만 정말 조심해야 할 것이 있다.브라우저를 닫고 언로드 시 AJAX 요청을 전송하면 window 객체가 파기되기 전에 서버에서 응답이 반환되지 않을 가능성이 매우 높습니다.이 경우(적어도 IE에서는) 접속 오브젝트가 절단되어 접속 타임아웃이 될 때까지 올바르게 종료되지 않습니다.서버에 접속 킵얼라이브가 설정되어 있지 않은 경우, 2개의 창을 닫은 후(다른 창이 열려 있는 동안), 서버에 대한 열려 있는 접속이 없어지고(IE6-7의 경우, IE8의 경우 - 6의 경우), 접속 타임아웃이 될 때까지 웹 사이트를 열 수 없습니다.

이전에도 언로드 시 AJAX 요청을 보내는 팝업창을 열었을 때 매우 신뢰성이 높았지만, 위에서 설명한 발행으로 인해 문제가 발생하여 추적 및 상황 파악에 오랜 시간이 걸렸습니다.그 후, 저는 열기 창에 서버 호출 코드가 있는지 확인하고, 언로드할 때마다 오프너가 있는지 확인하고 코드를 실행했습니다.

마지막 브라우저 창을 닫으면 IE의 연결이 제대로 끊어지지만 다른 창이 하나 열려 있으면 연결이 끊어지지 않습니다.

추신. 그리고 위의 답변에 대한 코멘트를 드리자면, AJAX는 사실 비동기적이지 않습니다.적어도 JS의 구현은 그렇지 않다.요청을 보낸 후에도 JS 코드는 여전히 서버로부터의 응답을 기다립니다.코드 실행을 차단하지는 않지만 서버가 응답하는 데 시간이 걸릴 수 있으므로(또는 Windows가 IE 창 개체를 종료하는 데 충분한 시간이 걸릴 수 있습니다) 위에서 설명한 문제에 직면할 수도 있습니다.

사용해보셨습니까?

var i = new Image(1,1); 
i.src='http://...'

그리고 서버에서 빈 이미지를 돌려보내는 중입니다.믿을 수 있어야 할 것 같아요. 대본이 차단될 거예요.BTW: 캐시를 방지하기 위해 타임스탬프를 추가할 수 있습니다.

우리는 그것이 필요했던 사례가 있다.서버에 심각한 메모리가 필요한 보고서 페이지이기 때문에, 페이지가 종료되는 대로 즉시 해방하고 싶다고 생각하고 있었습니다.프레임셋을 생성하여 언로드 핸들러를 추가했습니다.가장 신뢰할 수 있는 방법은 이미지의 src를 해방 스크립트로 설정하는 것입니다.실제로 크로스 브라우저 호환성을 위해 언로드와 온 언로드 모두를 사용했습니다.웹 키트 나이트리에서는 작동하지 않았지만 관리는 괜찮았습니다.

그러나 그것은 내가 제안한 해결책이 아니었다.나는 더 많은 일을 수반하지만 훨씬 더 강한 심장 박동 방식을 사용할 것이다.

페이지는 정기적으로 하트비트 요청을 보냅니다.각 요청은 페이지에서 마지막 하트비트를 설정합니다.마지막 하트비트가 너무 오래되었을 경우 서버에서 실행되고 메모리를 클리어하는 스레드가 필요합니다.

이 방법으로는 페이지를 장시간 방치하는 문제가 해결되지 않습니다.그러기 위해서는 사용자 액티비티에 대한 감시가 필요하며 일정 기간 비활성화 후 해당 페이지를 종료합니다(사용자에게 확인하시기 바랍니다).

있는 가 자신이 있는 unload AJAX는에 AJAX 빠릅니다.요청을 전송하기만 하면 완료됩니다. (단, 방금 만든 요청 개체를 지워야 할 수도 있습니다.)

AJAX를 async:false옵션( 설명과 같이)을 클릭합니다.하지만, 그냥 보내는 것만으로 끝납니다.

서버 측에 언로드에 대해 통지만 하면 되는 경우가 있었습니다.

이 경우 무시_user_abort할 수 있습니다.그러면 '신뢰할 수 있는' 일이 발생한다는 것을 알 수 있습니다.

언급URL : https://stackoverflow.com/questions/3584288/can-the-unload-event-be-used-to-reliably-fire-ajax-request