Javascript 确保在更改页面后完成请求

Javascript 确保在更改页面后完成请求,javascript,ajax,Javascript,Ajax,问题是:我有一个定制的Analytics引擎,它使用JavaScript发送日志。我想在用户提交表单后发送日志。日志是使用AJAX发送的。现在的问题是,表单提交不是AJAX,而是刷新页面的正常请求 我已经了解到,即使客户端中止连接,也可以强制执行脚本 我想了解的是,如果在发送AJAX调用后几乎立即提交表单,如何确保服务器接收到请求和标题?假设这是带有提交按钮的表单: <form id="myForm" action="/myAction.html" method="POST">

问题是:我有一个定制的Analytics引擎,它使用JavaScript发送日志。我想在用户提交表单后发送日志。日志是使用AJAX发送的。现在的问题是,表单提交不是AJAX,而是刷新页面的正常请求

我已经了解到,即使客户端中止连接,也可以强制执行脚本


我想了解的是,如果在发送AJAX调用后几乎立即提交表单,如何确保服务器接收到请求和标题?

假设这是带有提交按钮的表单:

<form id="myForm" action="/myAction.html" method="POST">

    <!-- form inputs -->
    <input type="submit" value="submit me!" />

</form>

使用JavaScript,您可以绑定到表单的提交事件,执行ajax调用,然后返回true以继续将表单提交到服务器:

<script type="text/javascript">

document.getElementById('myForm').addEventListener('submit', function(e){
    // do your ajax call here and when you finish, return true from
            // this function (in the ajax success callback)
    return true;
});

</script>

document.getElementById('myForm')。addEventListener('submit',函数(e){
//在这里执行ajax调用,完成后从
//此函数(在ajax成功回调中)
返回true;
});

这需要一个同步AJAX调用。因此,您可以等待
readyState
2(已接收请求)或3(处理请求),而不是等待4(请求完成且响应就绪),但不能异步返回。
var url = "...";
var my_form = document.getElementsByTagName("form")[0];
var request_received = false;

my_form.addEventListener("submit", function(e) {
    if (!request_received) {
        e.preventDefault(); // prevent the form from submitting

        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {
            if (xhr.readyState >= 2 && !request_received) {
                request_received = true;
                my_form.submit(); // submit the form only if the request has been received
            }
        };
        xhr.open("GET", url, true);
        xhr.send();

        return false;
    }
}, false);