【问题标题】:Why don't synchronous ajax calls in jquery support timeout?为什么jquery中的同步ajax调用不支持超时?
【发布时间】:2011-12-16 17:16:41
【问题描述】:

我正在阅读here,jquery 中的同步 ajax 调用不会超时。

这是技术限制,还是作者不想支持的东西?当 ajax 调用同步时,实际发生了什么?

【问题讨论】:

  • 基本上,在同步ajax请求期间,浏览器被阻塞,浏览器被阻塞时无法执行javascript。正因为如此,jQuery 无法在设置的超时后中止 ajax 请求,因为 jQuery 是 javascript,并且在浏览器被阻止时无法执行 javascript。这是同步 ajax 的主要缺陷。
  • @KevinB - 这就是我一直在寻找的答案,我也巧合地发现了它。我认为关键是浏览器处理同步/异步而不是超时。如果浏览器有超时作为 XHR api 的一部分,这不会是一个问题
  • 如果您无法摆脱同步 ajax,第二个最佳解决方案是在服务器端实现超时,这样如果时间超过 x 秒,则返回 500 标头。

标签: jquery ajax timeout


【解决方案1】:

浏览器通过XMLHttpRequest API 处理同步/异步请求,但它没有内置的超时功能。 JQuery 在浏览器 XHR API 之上的 JavaScript 中实现了自己的超时。

由于同步调用会阻止所有正在运行的脚本,因此 JQuery 超时不起作用。从理论上讲,如果在浏览器级别(而不是 JS 级别)实现同步超时,它们似乎是可能的。

【讨论】:

    【解决方案2】:

    确实是和AJAX请求的性质有关,jQuery无法修改。

    我认为在这些情况下应该在服务器端实现超时。

    【讨论】:

      【解决方案3】:

      在请求完成之前,同步 AJAX 调用会阻塞。由于技术原因,无法实现超时,因为 AJAX 调用必须稍后执行。

      如果稍后执行 AJAX 调用,该函数必须以某种方式实现阻塞功能,以阻止代码在 AJAX 调用后进一步运行,并在超时后再次执行 - 不可能。

      【讨论】:

        猜你喜欢
        • 2011-01-12
        • 1970-01-01
        • 2010-12-03
        • 2011-06-25
        • 2014-02-13
        • 1970-01-01
        • 2012-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多