html 페이지 닫기, 리셋 전 알림
1865 단어 프런트엔드 html
var isLoad=false;
window.onload = function(){
isLoad=true;
};
window.onbeforeunload = function() {
var result=getEntity('#update_com_form');
console.log(Object.getOwnPropertyNames(result).length);
if(result!=null && Object.getOwnPropertyNames(result).length>0){
return " , ?";
}
};
$(window).unload(function(event){
if(!isSaveSuccess && isLoad){
var result=getEntity('#update_com_form');
if(result!=null){
saveTempComInfo();
}
}
});
시작된 네트워크 요청 ajax는 반드시 동기화해야 합니다.
//
function saveTempComInfo(){
var result=getEntity('#update_com_form');
if(result!=null){
jQuery.ajax({
url:"/pages/auditJson/saveTempComInfo",
type:'post',
dataType: "json",
async: false,//
data:result,
timeout:15000,
contentType : "application/x-www-form-urlencoded; charset=utf-8",
success:function(feedresult){
if(feedresult){
if(feedresult.status){
}
}
},
complete:function (XMLHttpRequest, textStatus) {
if(textStatus=='error'){
log(" !");
}else if(textStatus=='timeout'){
log(' , ');
}
}
});
}
}
원리 따위는 투철하지 않다. 동기화 방법이라면 브라우저는 unload 이벤트가 실행되기를 기다렸고, 비동기적인 방법은 요청을 던진 후에 unload를 계속 실행해서 요청을 잃어버려서 요청을 중단시켰다.여기에서 타오바오UED가 beforeunload의 분실률을 연구하는 글을 보았는데, 이 방법을 사용해 달라고 요청하면 분실되는 경우가 없지 않을까요?인터넷에서 또 하나의 연구 페이지가 닫혀서 요청을 보내는 글을 보았습니다. 여기에서 그가 사용하는 이미지 대상을 구축하여 요청을 보냈지만 i와 Firefox도 모두 중단되었습니다. 저는 크롬에서 실행할 수 있다는 것을 실험했습니다.그리고 작가도 i, Firefox를 완성하기 위해 1초를 슬립했다.나는 이 원리가 aax 동기화 방식과 같다고 생각한다. unload의 촉발을 막아서 요청을 완성하는 방법이어야 한다. 구체적으로는 잘 알지 못한다. 큰 소가 미혹을 풀기를 기다린다.