有没有办法让ajax请求总是按顺序排列?

时间:2010-09-19 21:02:15

标签: php jquery ajax codeigniter

我目前正在做的是使用jQuery在每个按键上执行ajax请求。因此,如果我的用户键入d-o-n-k-e-y,它将为每个字母发送一个请求。但是,由于它们采用不同的路径连接到网络上的服务器,如果它们输入d-o-n-k-e-y的速度太快,它们并不总是按顺序到达。它们可能以D-n-o-k-y-e的形式到达,并作出相应的反应。有没有一种方法可以确保所有请求按顺序发送?

我不认为在发送下一个请求之前等待请求的确认会起作用,因为它会减慢信息传输的速度。有没有人有任何想法?

感谢。

2 个答案:

答案 0 :(得分:7)

来自:http://api.jquery.com/jQuery.ajax/

async boolean
默认值: true

  

默认情况下,发送所有请求   异步(即设置为true)   默认情况下)。如果你需要同步   请求,将此选项设置为false。   跨域请求和dataType:   “jsonp”请求不支持   同步操作。注意   同步请求可能是暂时的   锁定浏览器,禁用任何   请求处于活动状态时的操作。

此外,每次按键发送一个ajax请求可能不是最佳选择。您是否可以使用超时并发送donkey请求(例如,每隔300毫秒缓存一次)?

答案 1 :(得分:-1)

以下是一些想法 -

  • 取消旧请求,因为新请求已生成。这将最大限度地减少服务器的负载并实现您的要求。

  • 不是让您的服务器跟踪哪些请求来自何时,而是只需要一个小帮助对象来跟踪哪个是最新的请求。 var mostRecentRequest = XHR({success:function(){if(this === mostRecentRequest){...}}});

  • 如上所述,当用户暂时停止输入时,只调用服务器。在keyup上执行setTimeout(),然后发送约500ms并发送请求,并在每次按下新键时取消并重置该超时。

请勿在浏览器中执行同步XHR请求。永远。在任何情况下。整个浏览器将一直挂起,直到请求完成,这可能需要几秒钟。