【问题标题】:Element Not Showing on show and immediate async ajax call元素未显示在显示和立即异步 ajax 调用中
【发布时间】:2018-02-16 16:17:09
【问题描述】:

我试图显示加载 gif 并调用 ajax 请求(在很长一段时间后响应),然后我隐藏加载 gif。

下面是代码:

$('.loading-gif').show();
$ajax({url:'',async:false}).done(function(){...//some operation});
$('.loading-gif').hide();

我想知道为什么会这样。 注意:当我使用调试进行检查时,它可以工作,但是当调用 ajax 请求时,gif 图像会停止动画。 还有什么是我解决这个问题的解决方案。

【问题讨论】:

  • 这是一个 ajax 调用,代码将在调用仍在运行时继续。如果调用成功或者调用失败,您应该将隐藏代码移动到 done 函数中以隐藏加载。

标签: javascript jquery


【解决方案1】:

JS 是单线程的,当您使用异步标志发出 ajax 请求时,它会暂停线程导致动画停止

同时进行同步 http 调用也不是一个好习惯。

这应该可以解决您的问题。

$('.loading-gif').show();
$ajax({url:''})
  .done(function(){
    ...//some operation
    $('.loading-gif').hide();
  });

【讨论】:

  • OK 动画停止,但 loading-gif 也没有显示... :(
  • 但是对于初始页面加载(给定的内联 css)加载启用并且那个时候我发出 ajax 请求动画正在运行并且加载隐藏工作
【解决方案2】:

尝试设置 async:true ,因为它允许渲染 UI 元素以及 ajax 调用

【讨论】:

    【解决方案3】:

    Jquery done 函数仅在 ajax 请求成功完成时运行,因此在 ajax done 函数中调用 $('.loading-gif').hide();

    所以 ajax 代码会是这样的。

    $('.loading-gif').show();
    $ajax({url:'',async:false})
      .done(function(){
        ...//some operation
        $('.loading-gif').hide();
      });
    

    【讨论】:

    • @Narengs 尝试将 done 函数替换为 successcomplete。希望它可以工作。
    • 我也试过了,还是不行……投了反对票(我仍然没有特权这样做)
    猜你喜欢
    • 2017-05-02
    • 2020-11-11
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 2023-03-09
    • 2020-07-20
    相关资源
    最近更新 更多