【发布时间】:2021-08-17 15:09:30
【问题描述】:
我正在开发 AngularJS 1.6 版本。 在我的 app.controller.js 中,我添加了三个事件监听器并附加了一个 deleteStudent 方法。
window.addEventListener('beforeunload', this.deleteStudent, false);
window.addEventListener(
'unload',
() => {
this.deleteStudent
},
false
);
window.addEventListener('pagehide', this.deleteStudent, false);
deleteStudent() {
let Url = "http://localhost:9000/students/3";
const deleteMethod = {
method: 'DELETE',
headers: {
'Content-Type': 'application/json'
},
keepalive: true
};
fetch(Url, deleteMethod);
}
API 调用未到达后端,但在 chrome 网络选项卡上列为 pending 状态。
*上面使用的删除 API 是在 Node js 中创建的,并且可以在 postman 中正常工作。
我必须仅在页面卸载时调用此 API,建议使用具有 keep-alive 属性 true 的 fetch API 或使用 sendBeacon( ),但我的后端 API 是 DELETE 类型,因此我不能使用 sendBeacon(),因为它只支持 POST。
【问题讨论】:
-
您好。您在问题中没有提供太多关于您的问题的信息。你得先定位问题——是事件监听回调没有被调用的问题吗?您可以使用断点进行验证,请注意这些事件不会可靠地触发developer.mozilla.org/en-US/docs/Web/API/Window/…。还是调用回调但请求以某种方式失败的问题?同样,在页面导航之间保留日志或设置断点可能会有所帮助。
-
嗨@DanMacák,事件侦听器回调被调用,如果我在获取后在断点处暂停后检查网络选项卡,那么我可以看到 API 调用被触发 pending状态,但它没有到达后端 API。
-
我尝试了您的代码示例,对我来说它在 Chrome 中运行良好。是的,我也得到了 pending 状态,但是当我检查我的代理 (Fiddler) 时,我看到服务器为 DELETE 请求 dummy.restapiexample.com/api/v1/delete/719 返回了 200 响应。那么你真的确定请求没有命中你的服务器吗?如果没有,它是否适用于上面的虚拟端点?
标签: angularjs fetch-api onbeforeunload onunload