【问题标题】:Best practices of timeout after Ajax callAjax 调用后超时的最佳实践
【发布时间】:2020-02-20 09:47:33
【问题描述】:

之前,在我的表重新加载新数据后,我已经实现了超时。在调用 ajax 后,我在如何更新我的 dom 时遇到了麻烦,因为我正在分析 webapp 之上开发前端 js。我已经找到了一个使用超时的解决方案,它将在刷新后加载 dom,但我不确定这是否是最佳做法,因为我必须预设时间并且不同的视图会有不同的查询和渲染时间。

  $( document ).ajaxSuccess(function( event, xhr, settings ) {
     setInterval(function(){ 
        let update = d3.selectAll("#" + arcapi.chartId() + ' tbody td')
        update.filter(function(){
           if(this.innerHTML === 'Tier 2'){
             return true;
            }
        }).style('background-color','green');
     }, 2000); 
  });

注意:我无法在 ajaxComplete 之后直接从 ajax 代码更新,因为我没有访问 ajax 文件的权限。这是迄今为止我在 8 天内获得的最佳解决方案。请让我知道您的意见和意见。

【问题讨论】:

  • 最佳实践是挂钩完成事件。在您自己的 $.ajax 调用中,它将是 .done / success:。在第 3 方库中,该库应为此提供一种机制,例如引发事件。听起来您的第 3 方库不提供此活动,因此您不能遵循“最佳实践”,而必须采用“在这种情况下的最佳做法”。

标签: javascript jquery ajax d3.js


【解决方案1】:

您可以按照engineers 中最推荐的格式遵循以下格式。 你也可以阅读这个official document

$.ajax({
        url: "YourRequestURL",
        error: function(){
            // This function would triggered when timeout occurred 
        },
        success: function(){
            //Your logic after success request 
        },
        timeout: 3000 // sets timeout 1 to 3 seconds is mostly used
    });

虽然没有具体的超时规则,但建议 将其设置在 1000-5000 之间。但是,根据您的要求,它可能会发生变化。

希望这会有所帮助

【讨论】:

  • 超时后可以设置1ms吗?喜欢在 ajaxcomplete 之后立即更新 dom 吗?
  • 答案是可以的。您可能知道默认值为 0(从技术上讲,它是未定义的,但表现为 0)。这意味着 jQuery 本身没有超时......如果浏览器有一些超时,你完全有可能会遇到它。但正如我所说的那样,这是不可行的
  • 谢谢,。能够将计时器设置为 0 但为什么建议设置在 1000 - 5000 之间。如果我将其设置为 0 。它会立即注入自定义 js,但从长远来看会影响 UI 的性能吗?
  • 好吧,让我再解释一下,假设有 30 个用户在同一个server(URL) 中请求,服务器请求池中会有一个队列。所以29个请求必须处于等待状态,如果你不设置timeout,请求不会等待服务器响应,结果它会失败。但是如果你设置timeout,请求将一直持续到时间结束。希望你能理解。
猜你喜欢
  • 2018-11-10
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
相关资源
最近更新 更多