Wes*_*ley 4 javascript jquery jquery-callback
我有一个用HTML构建的应用程序,它使用$ .get()在一个模态中加载全屏
我有一个加载屏幕,当有人点击图标加载应用程序时触发.
我希望在清除和显示应用程序之前,加载屏幕至少显示2秒钟.
是否有一个好的,安全的方法来启动运行2000毫秒的计时器,检查由回调填充的变量以查看它是否为空,然后仅在加载变量时继续执行某个操作?
我知道while循环可以解决这个问题,但是在缓慢的一天加载内容之前可能会循环1000次,这似乎是一种低效的做事方式.
回答
$('#testApp').click(function() {
var twoSecMin = $.Deferred();
setTimeout(function () { twoSecMin.resolve(); }, 2000);
$('#appModal').fadeIn(400);
$.when($.get("/usm/portal/_layouts/monkeysphere/test.aspx"),twoSecMin).then(function (data) {
$('#appContainer').html(data[0]);
$('#appContainer').show();
$('#appModal').fadeOut(200);
});
});
Run Code Online (Sandbox Code Playgroud)
如果您使用的是最新版本的jQuery(1.5或更高版本),则可以使用固定超时创建a $.Deferred
和resolve
它:
var twoSecMin = $.Deferred();
setTimeout(function () { twoSecMin.resolve(); }, 2000);
Run Code Online (Sandbox Code Playgroud)
另外,保存jqXHR
返回的$.get
,这是一个扩展Deferred
对象:
var ajaxReq = $.get("/usm/test.aspx", ...);
Run Code Online (Sandbox Code Playgroud)
然后等待两个:
$.when(twoSecMin, ajaxReq).then(function (_, res) {
// ready...
var data = res[0];
// ...
});
Run Code Online (Sandbox Code Playgroud)