如何在没有Javascript中的XMLHttpRequest的情况下将数据发送到服务器?

如何在没有Javascript中的XMLHttpRequest的情况下将数据发送到服务器?,javascript,ajax,html,browser,Javascript,Ajax,Html,Browser,我已经读到,除了使用ajax(或fetch)之外,还有其他一些方法可以将小块数据(主要是跟踪信息)发送到服务器。它忽略了来自服务器的响应。当浏览器有机会异步发送此消息时,浏览器会在不延迟卸载或影响下一次导航性能的情况下异步发送此消息 我认为这有点像navigator.theMethod(url,data) 有人知道我在说什么吗 您可以在iframe中打开某个URL或将此URL设置为图像源。 例如: var image = document.createElement( 'img' ),

我已经读到,除了使用ajax(或fetch)之外,还有其他一些方法可以将小块数据(主要是跟踪信息)发送到服务器。它忽略了来自服务器的响应。当浏览器有机会异步发送此消息时,浏览器会在不延迟卸载或影响下一次导航性能的情况下异步发送此消息

我认为这有点像
navigator.theMethod(url,data)


有人知道我在说什么吗

您可以在iframe中打开某个URL或将此URL设置为图像源。
例如:

var image = document.createElement( 'img' ),
    iframe = document.createElement( 'iframe' );

image.src = '/some/url?with=parameters';
iframe.src = '/some/url?with=parameters';

但是您不会收到任何数据响应

我找到了答案。该方法称为
navigator.sendBeacon()

旧方法是通过使用同步XMLHttpRequest或在卸载处理程序中加载映像向服务器提交数据。这将导致页面卸载延迟

使用sendBeacon()方法,当用户代理有机会这样做时,数据将异步传输到web服务器,而不会延迟卸载或影响下一次导航的性能

以下是一个最低限度的示例用法:

window.addEventListener('unload', logData, false);

function logData() {
    navigator.sendBeacon("/log", analyticsData);
}

这是关于它的最新消息

嗯。。。有不同的方法,都比ajax复杂。要发送的数据越小,就越不需要使用与ajax不同的东西,除了安全问题。最常见的是“web服务”()此方法创建时比ajax更简单。可能会自动通知页面卸载的唯一事情是u/a关闭websocket。您可能想到的是window.onunload,它不符合您的想法。除了websocket断开连接之外,并没有其他方法可以通知服务器页面正在关闭,而无需http请求。您可以在window.onunload事件中使用它,因为不管实际窗口的状态如何,浏览器都应该处理它。因此,它也会在关闭选项卡后将数据发送到指定的地址。但问题并不在于是否检测到制表符关闭。这是离题了。我开始相信这只是一个梦,奇怪的是我不能用谷歌搜索它,而且没有其他人听说过。我知道这个方法。我正在寻找的是一个更简单的设计,使变通办法没有必要。如果我没记错的话:)(奇怪的是我找不到它。)为什么这是一个解决办法?因为它不是它本来打算这样做的用法。我找到了解决方案,检查我的答案。通常的嫌疑犯,safari和IE,不支持最新的safari现在支持它,但是,我认为可以肯定的说IE永远不会支持它。