如果AJAX响应成功,取消/删除/禁用beforeunload eventlistener

时间:2018-02-20 21:52:04

标签: javascript addeventlistener onbeforeunload

在我的Android网页应用页面中,浏览器可以在错误刷新页面时警告用户:

<script>
    window.onbeforeunload = function(e) {
       var dialogText = 'Dialog text here';
       e.returnValue = dialogText;
       return dialogText;
    };
</script>

它运作良好。 但是在我的AJAX调用中(如果保存过程成功)我会自动将用户重定向到主页。 (用户不应该留在同一页面)我的工作代码是:

$.ajax({
       url: '{{ url()->current() }}',
       type: 'POST',
       data: $('#mainForm').serializeArray(),
       beforeSend: function (xhr) {
              $.LoadingOverlay("show");
       },
       error: function(xhr,status,error){ 
              $.LoadingOverlay("hide");
              swal('Error','bla bla bla!', 'error');
       },
       success: function(result, status, xhr){
              if(result.hasOwnProperty('success')){ 
                   /* Here i want to disable beforeunload */
                   window.location.href = "{{ url('m') }}";
              }else if(result.hasOwnProperty('error')){
                   swal('Error',result.error, 'error');
              }else{
                   swal('Error',"bla bla bla ", 'error');
              }
       },
       complete: function(xhr){
              $.LoadingOverlay("hide");
       }
 });

在成功的情况下,我不希望用户决定留在此页面或重定向到新位置。我想自动将用户重定向到新位置。

我尝试了this个解决方案:

window.onbeforeunload = function () {
  // blank function do nothing
}

OR

window.onbeforeunload = null;

this

function functionToRun(e){
     if(sessionStorage.token != "abide" ){
        // call api
     }
}

window.removeEventListener("beforeunload",functionToRun);

我无法解决我的问题。

1 个答案:

答案 0 :(得分:2)

removeEventListener应该有效,但您应该命名beforeunload处理程序:

function onBeforeUnload(e) {
    var dialogText = 'Dialog text here';
    e.returnValue = dialogText;
    return dialogText;
};    
window.addEventListener('beforeunload', onBeforeUnload);

在您的success回调中:

window.removeEventListener('beforeunload', onBeforeUnload);