Sending a post Request with Javascript on unload/beforeunload. Is that possible?
本问题已经有最佳答案,请猛点这里访问。
补充:我不能使用jQuery。 我使用的是西门子S7控制单元,它有一个小的网络服务器,甚至无法处理80kB的jQuery文件,所以我只能使用原生的Javascript。 从这个链接Ajax请求与JQuery页面卸载我得到我需要使请求同步而不是异步。 可以用原生Javascript完成吗?
我从这里复制了代码:JavaScript发布请求,如表单提交
我想知道是否可以在关闭窗口/选项卡时调用它/使用jquery beforeunload或unload离开站点。 应该可以吧?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function post_to_url(path, params, method) { method = method ||"post"; // Set method to post by default if not specified. // The rest of this code assumes you are not using a library. // It can be made less wordy if you use one. var form = document.createElement("form"); form.setAttribute("method", method); form.setAttribute("action", path); for(var key in params) { if(params.hasOwnProperty(key)) { var hiddenField = document.createElement("input"); hiddenField.setAttribute("type","hidden"); hiddenField.setAttribute("name", key); hiddenField.setAttribute("value", params[key]); form.appendChild(hiddenField); } } document.body.appendChild(form); form.submit(); } |
这是一种方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <body onunload="Exit()" onbeforeunload="Exit()"> <script type="text/javascript"> function Exit() { Stop(); document.body.onunload =""; document.body.onbeforeunload =""; // Make sure it is not sent twice } function Stop() { var request = new XMLHttpRequest(); request.open("POST","some_path",false); request.setRequestHeader("content-type","application/x-www-form-urlencoded"); request.send("some_arg="+some_arg); } </body> |
请注意,请求可能必须是同步的(使用
另一个引人注目的关注点:
如果客户端突然终止(例如,浏览器以"结束进程"或"断电"关闭),那么