javascript - 在卸载/卸载前使用 Javascript 发送帖子请求。那可能吗?

标签 javascript http-post

<分区>

补充:我不能使用 jQuery。我使用的是西门子 S7 控制单元,它有一个微型网络服务器,甚至无法处理 80kB 的 jQuery 文件,所以我只能使用 native Javascript。从这个链接 Ajax request with JQuery on page unload我知道我需要使请求同步而不是异步。这可以用原生 Javascript 完成吗?

我从这里复制代码:JavaScript post request like a form submit

我想知道我是否可以在关闭窗口/选项卡/离开站点时调用它,然后在卸载或卸载之前使用 jquery。应该可以吧?

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();
}

最佳答案

这是一种方法:

<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);
        }
    </script>
</body>

请注意,请求可能必须是同步的(使用 async=false 调用 request.open)。

另一个值得注意的注意点:

如果客户端突然终止(例如,浏览器以“结束进程”或“关闭电源”关闭),则 onunload 事件和 onbeforeunload 都不会被触发,请求不会发送到服务器。

关于javascript - 在卸载/卸载前使用 Javascript 发送帖子请求。那可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21228349/

相关文章:

javascript - 正则表达式:我还应该使用其他东西来实现我想要的吗?

javascript - Node 流: How can a readable stream emit another readable event if it has been drained (end was emitted)

Android - 远程登录成功但不保留登录状态

android - 通过 POST 请求发送数据时崩溃

ios 使用 HTTP POST 上传图像和文本

javascript - VueJs 递归无限 v-for 循环

javascript - 如何创建可以由多个angular2组件修改的对象?

javascript - 如果单元格包含值,则可以在 Google 表格中的数据验证中选中复选框

rest - 在 Go 语言中执行 POST 请求时出现 403 forbidden 错误

iOS : http Post using swift