我知道我们可以从某个服务器发出 javascript ajax 请求,它要么收到响应,要么在一段时间后给出超时错误。
让我们考虑一下这种情况,当我们不想等待请求时,服务器会在收到请求后随时异步发送响应(或者我们可以说这将是从服务器到客户端的另一个请求),然后调用带有响应的 javascript CB 函数。
我正在寻找如何实现它的想法,主要支持所有现代浏览器,如果可能的话,不依赖任何第三方插件,除了 jQuery。
Ajax的主要特点是它默认是异步的,你的程序将继续运行而不等待响应。所以除非我误读了你的问题,否则这就是你所需要的。
如果您使用jquery,那么您传入一个回调函数,该函数仅在服务器发回响应时执行。您可以在设置中指定超时,但我不确定在不出现超时错误的情况下可以提供的最长时间。但这至少需要几秒钟。
您甚至可以为成功和失败指定不同的回调,如下所示(改编自 jquery ajax API,但添加了 5 秒的超时):
var request = $.ajax({
url: "http://www.some.url/",
method: "GET",
data: { some : stuff },
dataType: "html",
timeout: 5000
});
request.done(function( data ) {
console.log( "SUCCESS: " + data );
});
request.fail(function() {
console.log( "Request failed");
});
4年后我遇到了这个问题。我不记得我在什么背景下问这个问题,但对于任何有相同疑问的人:
Http 是一种请求/响应协议。这意味着客户端发送请求,服务器用一些消息/数据响应该请求。该请求的故事到此结束。
为了让服务器在客户端触发某些内容,我们必须使用保持与服务器的连接的东西,而不是在收到响应后结束通信。 Socket.io 是解决这个问题的双向事件驱动库。
要更新我的在线商店上的购物车(PHP 会话存储并保留数据库中的商品库存),我只需在调用它后添加 100 毫秒的超时 并删除成功/错误回调。
$.ajax({
url: 'http://www.some.url/',
method: 'GET',
data: {
some : 'stuff'
},
dataType: 'html',
timeout: 100
});
注意:如果某些请求未到达也没关系,因为保存订单时,会通过回调发送整个购物车的更新。 如果您的查询需要确认,请勿使用该解决方案!
我相信你的问题与this类似 作者:保罗·汤布林。我使用gdoron提供的答案,它也被标记为最佳解决方案,以及AS7K的评论。
$.ajax({
url: "theURL",
data: theData
});
注意:未提供
async
参数。