如何等待浏览器关闭直到服务器调用完成?

时间:2017-01-03 06:02:18

标签: javascript angularjs ajax http browser

我尝试拨打一个服务,在浏览器关闭或标签关闭时更新数据。问题是使用$http进行服务调用及其异步,因此根据我的浏览器卸载事件取消该调用并关闭浏览器。我希望浏览器等到我收到该服务电话的响应/错误。

我尝试拨打e.preventDefault()e.stopPropagation(),但无效。

function releaseDocument(e) {
    EventService.releaseDocument().then(function() {
        window.close();
    }, function() {
        window.close();
    });
}

$window.onbeforeunload = releaseDocument;
$window.onunload = releaseDocument;

任何人都可以帮助或建议任何替代方案来实现同样的目标!?

1 个答案:

答案 0 :(得分:0)

我们可以通过使用同步AJAX调用来实现,也只是我的建议。

  

当您关闭浏览器/标签时,我们会显示一个确认框。同时,我们会将您的服务称为同步。但是我们应该在执行确认框之前调用此服务。因此,同步调用将执行每一行并返回结果,然后只有确认才会触发/或关闭选项卡。在这里,我们几乎没有时间执行该功能。

 window.addEventListener("beforeunload", function (e) {
  var confirmationMessage = "Do you want close this browser";    
   releaseDocument()// it should be an sync function ( like you can set async:false in your ajax options 

  (e || window.event).returnValue = confirmationMessage; //Gecko + IE
  return confirmationMessage;                            //Webkit, Safari, Chrome
});