为什么在window.unonload中调用ajax从未调用过?

时间:2014-07-30 14:20:29

标签: javascript ajax angularjs

我有一个用Angularjs编写的上传视图。我希望确保在上传过程中页面重新加载关闭;应删除上载到服务器的所有文件以保持一致性。所以我尝试的是:

// this function is under /upload view, and inside UploadController
window.onunload = function () {
   $http.delete(...call delete on my server..);
};
但是,DELETE没有到达服务器,我错过了什么?

1 个答案:

答案 0 :(得分:0)

我之前也遇到过这个问题。打开浏览器控制台并转到网络选项卡。现在离开页面。您将很快看到您的ajax请求被标记为(canceled),因为浏览器会在您离开时取消请求。

Save failing

我在谷歌浏览器中观察到这种行为并且没有检查过其他浏览器,但是如果它在一个最流行的浏览器中无法可靠地工作,那么你知道这不是一个可靠的整体解决方案。

基本上,没有可靠的方法来做到这一点。我发现在window.onbeforeunload中甚至没有做ajax调用是可靠的。

如果我是你,我会在你上传的文件上设置一个到期日期,并有一个cron作业,在到期日期后删除它们。即使window.onunload有效,它仍然不是一个可靠的解决方案 - 例如,当用户的机器意外关闭时。