Safari不在服务器端的refresh/onbeforeunload上运行回调函数(调用客户端代码)

pet*_*aya 9 javascript safari client onbeforeunload server

我正在尝试在卸载窗口时(即刷新页面时)向数据库发送一些请求.出于某种原因,仅在Safari上,客户端代码被执行,但对服务器的请求永远不会通过.当我在调试器中手动单步执行代码时,服务器确实获得了请求并处理它.

任何人都知道为什么会这样吗?

window.onbeforeunload = function() {
  console.log("inside on before unload");
  var requestParam = new a.ListRequest();
  requestParam.setAction('set_delete');
  
  var callback = function(isSuccess, response) {
    if (isSuccess) {
      //do something
    } else {
      // do something else
    }
  };
  
  // Sends request to server
  a.Fetch.list(requestParam, callback);
  
}
Run Code Online (Sandbox Code Playgroud)

cra*_*gts 5

可能在Fetch调用中发生的请求是异步的,Safari不会等待它完成,然后再转到下一页/关闭选项卡.如果你可以使呼叫同步,它应该工作.请记住,在某些工具中通常不鼓励和弃用同步调用.

这个与Jquery相关的答案对同步调用有一个很好的解释:https://stackoverflow.com/a/11755262/1341437