我正在使用jQuery的$.get()
方法从外部php文件中检索数据。
代码刷新数据,但是,因为我正在刷新两个外部文件,第二个(messages.php)的html将刷新,然后在第一个文件(tasks.php)刷新后大约300ms再次刷新。 / p>
除了将tasks.php和messages.php合并为一个(在这种情况下我更不喜欢),我怎么做一次调用来刷新它们?
换句话说,你将如何重写这个功能?
感谢任何建议!
function refreshTopBar() {
var rootx = $('#admin_topbar_root').val();
var root = (rootx.match(/\//g) || []).length;
var userid = $('#admin_topbar_userid').val();
$.get(rootx + "qms/inc/tasks.php", {r:root, u:userid}, function(data) {
$('#mytasks').html(data);
setTimeout(refreshTopBar, 9000);
});
$.get(rootx + "qms/inc/messages.php", {u:userid}, function(data) {
$('#messages_li').html(data);
setTimeout(refreshTopBar, 9000);
});
}
refreshTopBar();
答案 0 :(得分:2)
您可以使用$.when()
传递ajax请求,并等待两者完成以执行函数。
function refreshTopBar() {
var rootx = $('#admin_topbar_root').val();
var root = (rootx.match(/\//g) || []).length;
var userid = $('#admin_topbar_userid').val();
var tasks = $.get(rootx + "qms/inc/tasks.php", { r: root,u: userid });
var msgs = $.get(rootx + "qms/inc/messages.php", { u: userid });
$.when(tasks, msgs).done(function (tasks_data, msgs_data) {
// return value is an array ['returned string', 'status', XHR Object]
// if one of them fails this won't run
$('#mytasks').html(tasks_data[0]);
$('#messages_li').html(msgs_data[0]);
setTimeout(refreshTopBar, 9000);
});
}
答案 1 :(得分:1)
一旦两个调用完成,您可以使用一种调用刷新函数的承诺。我在下面更改了您的代码:
function refreshTopBar() {
var rootx = $('#admin_topbar_root').val();
var root = (rootx.match(/\//g) || []).length;
var userid = $('#admin_topbar_userid').val();
$.get(rootx + "qms/inc/tasks.php", {r:root, u:userid}, function(data) {
$('#mytasks').html(data);
done();
});
$.get(rootx + "qms/inc/messages.php", {u:userid}, function(data) {
$('#messages_li').html(data);
done();
});
var done_int = 0;
function done() {
done_int++;
if (done_int > 1) {
setTimeout(refreshTopBar, 9000);
}
}
}
refreshTopBar();
这将等到done()
函数在开始超时之前至少被调用两次。