8

是否可以在没有任何响应的情况下发送 jQuery.ajax 调用或等效调用?当我使用 onbeforeunload 命令离开页面时,我想在服务器上触发一些东西,但这不是我需要反馈给客户端的东西,所以我只想发送命令而不等待响应。

那可能吗?

4

4 回答 4

14

每个请求都有响应。 即使服务器抛出错误,也会返回带有错误的响应。

如果您不想添加success回调,则可以忽略响应。

$.ajax({
    url: "theURL",
    data: theData
});
于 2012-09-20T18:11:40.073 回答
2

您可以使用此堆栈溢出答案中引用或直接链接到此处的导航器 sendBeacon API 。

根据网站上的描述,它异步发送一些数据,并检查它是否能够将数据排队等待发送。卸载处理程序不应像处理其他异步 XMLHttpRequest 那样忽略该请求。

navigator.sendBeacon(url, data) - 如果用户代理能够成功地将数据排队等待传输,则 sendBeacon() 方法返回 true,否则返回 false。

...

确保在卸载文档期间已发送数据对于开发人员来说传统上是一件困难的事情,因为用户代理通常会忽略在卸载处理程序中生成的异步 XMLHttpRequest。

于 2019-08-29T23:23:37.517 回答
1

如果您试图尽快返回响应,我认为这更像是服务器架构决定。您可以将请求涉及的实际工作卸载给代理或其他什么,以便您可以尽快返回给用户?我不认为只发送单向消息是可行的

于 2012-09-20T18:12:30.720 回答
1

假设你正在使用这样的东西:

$.ajax({
   url: "test.html",
   context: document.body
})

(借用http://api.jquery.com/jQuery.ajax/和编辑),您可以丢弃响应。

于 2012-09-20T18:15:28.503 回答