我目前正在做的是使用jQuery在每个按键上执行ajax请求。因此,如果我的用户键入d-o-n-k-e-y,它将为每个字母发送一个请求。但是,由于它们采用不同的路径连接到网络上的服务器,如果它们输入d-o-n-k-e-y的速度太快,它们并不总是按顺序到达。它们可能以D-n-o-k-y-e的形式到达,并作出相应的反应。有没有一种方法可以确保所有请求按顺序发送?
我不认为在发送下一个请求之前等待请求的确认会起作用,因为它会减慢信息传输的速度。有没有人有任何想法?
感谢。
答案 0 :(得分:7)
来自:http://api.jquery.com/jQuery.ajax/
async boolean
默认值: true
默认情况下,发送所有请求 异步(即设置为true) 默认情况下)。如果你需要同步 请求,将此选项设置为false。 跨域请求和dataType: “jsonp”请求不支持 同步操作。注意 同步请求可能是暂时的 锁定浏览器,禁用任何 请求处于活动状态时的操作。
此外,每次按键发送一个ajax请求可能不是最佳选择。您是否可以使用超时并发送don
和key
请求(例如,每隔300毫秒缓存一次)?
答案 1 :(得分:-1)
以下是一些想法 -
取消旧请求,因为新请求已生成。这将最大限度地减少服务器的负载并实现您的要求。
不是让您的服务器跟踪哪些请求来自何时,而是只需要一个小帮助对象来跟踪哪个是最新的请求。 var mostRecentRequest = XHR({success:function(){if(this === mostRecentRequest){...}}});
如上所述,当用户暂时停止输入时,只调用服务器。在keyup上执行setTimeout(),然后发送约500ms并发送请求,并在每次按下新键时取消并重置该超时。
请勿在浏览器中执行同步XHR请求。永远。在任何情况下。整个浏览器将一直挂起,直到请求完成,这可能需要几秒钟。