我知道我们可以从某个服务器发出javascript ajax请求,它会在一段时间后收到响应或发出超时错误。
让我们考虑这种情况,当我们不想等待请求而不是服务器会在收到请求之后随时发送响应(或者我们可以说它将是服务器到客户端的另一个请求)async然后用响应调用javascript CB函数。
我正在寻找如何解决它的想法主要支持所有现代浏览器,如果可能的话,不依赖于任何第三方插件,除了可能是jQuery。
答案 0 :(得分:0)
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");
});
答案 1 :(得分:0)
四年后,我遇到了这个问题。我不记得我在什么情况下问过这个问题,但是对于有相同查询的人:
Http是一个请求/响应协议。这意味着客户端发送一个请求,而服务器使用一些消息/数据响应该请求。那是该请求的故事结尾。
为了使服务器在客户端上触发某些操作,我们将必须使用一些保持与服务器的连接的方法,而不是在获得响应后结束通信。 Socket.io是双向事件驱动的库,可以解决此问题。
答案 2 :(得分:0)
要在我的网上商店更新购物车(PHP 会话存储并保留数据库中的商品库存),我只需在调用它后添加 100 毫秒的超时 并删除成功/错误回调。
$.ajax({
url: 'http://www.some.url/',
method: 'GET',
data: {
some : 'stuff'
},
dataType: 'html',
timeout: 100
});
<块引用>
注意:有些请求没有到达也没关系,因为在保存订单时,会通过回调发送整个购物车的更新。 如果您的查询需要确认,请不要使用该解决方案!
答案 3 :(得分:-1)
我相信您的问题类似于this 由Paul Tomblin撰写。我使用 gdoron 提供的答案,该答案也被标记为最佳解决方案,还使用了 AS7K 的评论。
$.ajax({
url: "theURL",
data: theData
});
注意:未提供async
参数。