【问题标题】:How can I make JQuery.ajax synchronous with a timeout?如何使 JQuery.ajax 与超时同步?
【发布时间】:2011-02-18 22:57:42
【问题描述】:

我有一个日历,其中包含服务器上的数据。当用户向前移动一个月时,我可能(基于之前的操作)需要在显示该月之前获取该数据。

我的代码处理了失败 (404),但我不能让它处理超时,因为调用是同步的。我知道 .ajax 调用同步时忽略超时,我想知道如何在异步调用周围进行同步等待?我想正确处理超时,但缺少自旋循环,我不知道如何在 javascript 中优雅地做到这一点。

我在页面上有一个模式对话框来停止点击,我只需要阻止用户直到我可以渲染下个月,或者如果发生超时,以防止他们移动到那个月,因为那个月的数据月份无效。

我不太明白 jquery 代码是如何实现这一点的......

【问题讨论】:

  • setInterval 会如你所愿吗?或者这就是你所说的“自旋循环”?
  • 使用异步 ajax 调用 - 不挂起浏览器是好事
  • 我看到了那个,但也没有很好的答案.....

标签: jquery


【解决方案1】:

我认为您希望在成功或失败之前保持屏幕锁定。听起来你想让 AJAX 调用 aysnch 并使用 JQuery AJAX 注册回调函数(例如 on error 事件):

错误(jqXHR,文本状态, errorThrown)Function 要成为的函数 如果请求失败则调用。这 函数接收三个参数: jqXHR(在 jQuery 1.4.x 中, XMLHttpRequest) 对象,一个字符串 描述错误的类型 发生和一个可选的异常 对象,如果发生了。可能的 第二个参数的值 (除了空)是“超时”,“错误”, “中止”和“解析器错误”。这是个 阿贾克斯事件。从 jQuery 1.5 开始, 错误设置可以接受一个数组 功能。每个功能将 依次调用。注意:这个处理程序是 不要求跨域脚本和 JSONP 请求。

【讨论】:

    【解决方案2】:

    根据我对您的问题的理解,听起来您应该能够通过嵌套 AJAX 调用来解决此问题,这样在第一个响应返回之前第二个调用不会触发:

    $.get('first.php',
        function(firstresponse){
            // do stuff with first response as needed
    
            $.get('second.php',
                function(secondresponse){
                    // do stuff with second response as needed
                }
    
            );
        }
    );
    

    【讨论】:

      猜你喜欢
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      相关资源
      最近更新 更多