2

我遇到需要在浏览器窗口关闭之前可靠地发送数据的情况。我目前的实现是使用同步 AJAX 调用。然而,这在不久的将来不太可能奏效,因为根据https://xhr.spec.whatwg.org/#synchronous-flag浏览器正在弃用同步 XHR 调用

我正在尝试用假的“img”调用替换 ajax 调用,参数化要发送的数据并将其附加为图像的 url 查询字符串。到目前为止,我尝试过似乎有效。我并不真正关心服务器响应,因此只要在卸载浏览器窗口之前发出请求并将其推送到线路。

我的问题是它有多可靠?有没有人有任何经验?

我的其他选择是将数据保存在 cookie 或网络存储中,并在下一个请求时发送它们,但这是基于用户将重新访问的假设,这在我的情况下可能不是真的。

谢谢。

4

2 回答 2

0

您可以使用 ajax 在窗口的卸载事件中执行此操作

您可以参考以下链接以了解更多关于您此时需要处理的问题和功能在以下链接中

是否有可能在窗口关闭之前发送请求

它可靠吗?

$(window).unload 是否在离开网页前等待 AJAX 调用完成

希望这可以帮助

于 2015-02-09T05:56:29.543 回答
0

我认为最好使用ajax请求。我没有证据,但从我的经验来看,dom 的工作速度比 js 慢。例如,当您执行此操作时:

var div = document.createElement('div');
div.innerHTML = "mama";
div.className = "myDiv";
document.getElementById("myWrapper").appendChild(div);
var text = document.getElementByClassName('myDiv')[0].innerHTML;

有时您会收到消息异常 - 无法读取未定义的属性 innerHTML。但是,如果你这样做

    setTimeout(function(){
        var text = document.getElementByClassName('myDiv')[0].innerHTML;
    }, 50);

它总是很好。这是因为 dom 还没有更新。因此,当您添加图像时,dom 可能无法处理它。而且,当您发送 ajax 请求时,我认为无论如何都会发送。

于 2015-02-11T08:45:09.700 回答