Javascript 用户离开页面时如何执行操作

Javascript 用户离开页面时如何执行操作,javascript,jquery,Javascript,Jquery,规格: 当用户离开页面时显示警报 当用户确认“离开此页面”时执行操作(发送ajax请求并等待收到响应) 收到ajax响应后,离开页面 我的代码是: window.onbeforeunload = function (e) { e = e || window.event; if (e) { e.returnValue = 'Sure?'; } $.ajax({ url: '/api/Electronic/leave',

规格:

  • 当用户离开页面时显示警报
  • 当用户确认“离开此页面”时执行操作(发送ajax请求并等待收到响应)
  • 收到ajax响应后,离开页面
  • 我的代码是:

     window.onbeforeunload = function (e) {
         e = e || window.event;
         if (e) {
             e.returnValue = 'Sure?';
         }
         $.ajax({
             url: '/api/Electronic/leave',
             dataType: "json",
             contentType: "application/json",
             cache: false,
             type: 'POST',
             data: myData,
             success: function (data) {
                 //how to leave this page?
             },
             error: function () {
                 console.log("Error");
             }
         });
         return 'Sure?';
     };
    

    -当用户离开页面并等待结果时,可以执行同步ajax调用

          window.onbeforeunload=function(e){        
    
            var result = false;
            $.ajax({
                url: 'https://api.github.com/users/mralexgray/repos',
                type: 'GET',
                async: false,
                success: function (data) {
    
                    //do whatever you want here
                    for (var i = 0; i < 10000;i++){
                        console.log(i);
                    }                                 
                    result = true;
                },
                error: function (e) {
                    console.log("error");                  
                }
            });
    
            if (result) {
                window.onbeforeunload = window.thisPage.closeEditorWarning;
            } else {
                var confirmationMessage = 'Somthing went wrong. If you leave your changes will be lost.';
    
                (e || window.event).returnValue = confirmationMessage;              
                 return confirmationMessage; 
            }
    
    
        }
    
    window.onbeforeunload=函数(e){
    var结果=假;
    $.ajax({
    网址:'https://api.github.com/users/mralexgray/repos',
    键入:“GET”,
    async:false,
    成功:功能(数据){
    //在这里你想干什么就干什么
    对于(变量i=0;i<10000;i++){
    控制台日志(i);
    }                                 
    结果=真;
    },
    错误:函数(e){
    控制台日志(“错误”);
    }
    });
    如果(结果){
    window.onbeforeunload=window.thisPage.closeEditorWarning;
    }否则{
    var confirmationMessage='出现问题。如果您离开,您的更改将丢失';
    (e | | window.event).returnValue=确认消息;
    返回确认消息;
    }
    }
    
    -当用户离开页面并等待结果时,您可以执行同步ajax调用

          window.onbeforeunload=function(e){        
    
            var result = false;
            $.ajax({
                url: 'https://api.github.com/users/mralexgray/repos',
                type: 'GET',
                async: false,
                success: function (data) {
    
                    //do whatever you want here
                    for (var i = 0; i < 10000;i++){
                        console.log(i);
                    }                                 
                    result = true;
                },
                error: function (e) {
                    console.log("error");                  
                }
            });
    
            if (result) {
                window.onbeforeunload = window.thisPage.closeEditorWarning;
            } else {
                var confirmationMessage = 'Somthing went wrong. If you leave your changes will be lost.';
    
                (e || window.event).returnValue = confirmationMessage;              
                 return confirmationMessage; 
            }
    
    
        }
    
    window.onbeforeunload=函数(e){
    var结果=假;
    $.ajax({
    网址:'https://api.github.com/users/mralexgray/repos',
    键入:“GET”,
    async:false,
    成功:功能(数据){
    //在这里你想干什么就干什么
    对于(变量i=0;i<10000;i++){
    控制台日志(i);
    }                                 
    结果=真;
    },
    错误:函数(e){
    控制台日志(“错误”);
    }
    });
    如果(结果){
    window.onbeforeunload=window.thisPage.closeEditorWarning;
    }否则{
    var confirmationMessage='出现问题。如果您离开,您的更改将丢失';
    (e | | window.event).returnValue=确认消息;
    返回确认消息;
    }
    }
    
    当用户确认“离开此页面”时执行操作(发送ajax请求并等待收到响应)

    那是不可能的。当用户确认“离开此页面”时,脚本终止

    当用户确认“离开此页面”时执行操作(发送ajax请求并等待收到响应)


    那是不可能的。当用户确认“离开此页面”时,您的脚本将被终止。

    在现代浏览器上,您不能再这样做。您的问题是什么?@ji ruh我发布的代码不起作用。如何等待直到收到响应?如何关闭ajax成功标签?试试这个,对于某些浏览器来说可能不稳定。看看这个答案:在现代浏览器上,你不能再这样做了。你的问题是什么?@ji ruh我发布的代码不起作用。如何等待直到收到响应?如何关闭ajax成功选项卡?尝试此方法对于某些浏览器来说可能不稳定。查看以下答案: