【问题标题】:Is there a way I can make ajax requests always go in order?有没有办法让ajax请求总是按顺序进行?
【发布时间】:2011-04-14 10:21:40
【问题描述】:
我目前正在做的是使用 jQuery 在每个按键上执行一个 ajax 请求。因此,如果我的用户键入 d-o-n-k-e-y,它将为每封信发送一个请求。但是,由于它们采用不同的路径到网络上的服务器,如果它们键入 d-o-n-k-e-y 太快,它们并不总是按顺序到达。他们可能会以 D-n-o-k-y-e 的形式到达,并做出相应的反应。有什么好的方法可以确保所有请求都按顺序发送吗?
我认为在发送下一个请求之前等待请求的确认是行不通的,因为它会大大减慢信息传输速度。有人有什么想法吗?
谢谢。
【问题讨论】:
标签:
php
jquery
ajax
codeigniter
【解决方案1】:
发件人:http://api.jquery.com/jQuery.ajax/
异步布尔值
默认值: true
默认情况下,发送所有请求
异步(即设置为 true
默认)。如果需要同步
请求,将此选项设置为 false。
跨域请求和数据类型:
“jsonp”请求不支持
同步操作。注意
同步请求可能会暂时
锁定浏览器,禁用任何
请求处于活动状态时的操作。
此外,每次击键都发送一个 ajax 请求可能不是最好的主意。您不能使用超时并发送don 和key 请求(例如缓冲至每300 毫秒)?
【解决方案2】:
这里有一些想法-
在发出新请求时取消旧请求。这将最大限度地减少服务器的负载并实现您的要求。
不是让您的服务器跟踪哪些请求是何时到来的,它只需要一个小的帮助对象来跟踪哪个是最新的请求。 var mostRecentRequest = XHR({ success: function() { if( this === mostRecentRequest ) { ... } } });
如上所述,仅在用户暂时停止输入时才调用服务器。在 keyup 上执行 setTimeout(),约 500 毫秒后触发并发送请求,并在每次按下新键时取消并重置超时。
不要在浏览器中执行同步 XHR 请求。曾经。在任何情况下。整个浏览器将挂起,直到请求完成,这可能长达几秒钟。