2010-09-19 108 views
2

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

我不认为在发送下一个请求之前等待来自请求的确认是可行的,因为这会降低信息传输的速度。有没有人有任何想法?

谢谢。

回答

7

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

异步布尔
默认:

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

此外,它可能不是每个按键发送ajax请求的最佳方法。您不能使用超时并发送donkey请求(例如,每隔300毫秒缓冲一次)?

+0

这真是个好主意。谢谢! – Ethan 2010-09-19 21:15:32

+0

+1用于提示缓冲和延迟。 – 2010-09-19 21:20:57

-1

这里有一些ideas-

  • 取消旧请求作为新制成。这将最小化地减少服务器的负载并实现你所要求的。

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

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

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

相关问题