【问题标题】:Hide Loading spinner after ajax complete eventajax完成事件后隐藏加载微调器
【发布时间】:2013-12-19 14:08:59
【问题描述】:

我正在使用 JQuery Mobile 1.4.0 构建跨平台应用程序,并将通过 phonegap 构建。例如我有两个页面,一个是#homepage,另一个是#detail page

<div id="home" data-role="page> Home Page 
   <a href="#detail">Go Detail</a>
</div>
<div id="detail" data-role="page> Detail Page </div>

JQuery Mobile 默认使用 ajax 将页面加载到 DOM 中,这很好,我的问题是,在详细页面显示之前,我需要通过 ajax 调用从远程服务器获取数据。我在文档上注册 ajaxStart 和 ajaxComplete 事件以显示和显示/隐藏微调器。

$(document).ajaxStart(function(){
  $.mobile.loading('show');
});
$(document).ajaxComplete(function(){
  $.mobile.loading('hide');
});

问题是 jquery mobile 在转换方法中调用 ajaxComplete 之前隐藏了加载微调器,因此实际上 $.mobile.loading('hide') 将被调用两次。这不好,因为数据尚未填充到 DOM 中,因此详细信息页面将是白色空白,然后在插入数据一段时间后。

如果你不知道我在说什么,你可以查看 jquery 移动源代码,你可以看到第 5070 行

this._triggerCssTransitionEvents( to, from, "before" );

// TODO put this in a binding to events *outside* the widget
this._hideLoading();

所以我的问题是如何在 ajaxComplete 之后而不是在页面转换之后真正隐藏加载微调器?

非常感谢您的帮助。

【问题讨论】:

  • 在我最近的一个应用程序中,我将微调器隐藏在 $(document).load 事件和 $(document).ajaxStop 事件中,没有任何问题。
  • @EthanZ 这让我沮丧了一段时间,你解决了吗?

标签: jquery jquery-mobile


【解决方案1】:

从使用complete 更改为stop,这将阻止加载微调器过早隐藏。

$(document).ajaxStart(function() {
    $.mobile.loading('show');
});

$(document).ajaxStop(function() {
    $.mobile.loading('hide');
});

【讨论】:

  • 它不起作用,因为 jquery mobile 在页面之间导航时实际上隐藏了微调器,因为过渡。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 2012-10-28
  • 1970-01-01
相关资源
最近更新 更多