【问题标题】: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 请求可能不是最好的主意。您不能使用超时并发送donkey 请求(例如缓冲至每300 毫秒)?

    【讨论】:

    • 这是一个很棒的主意。谢谢!
    【解决方案2】:

    这里有一些想法-

    • 在发出新请求时取消旧请求。这将最大限度地减少服务器的负载并实现您的要求。

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

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

    不要在浏览器中执行同步 XHR 请求。曾经。在任何情况下。整个浏览器将挂起,直到请求完成,这可能长达几秒钟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      相关资源
      最近更新 更多