jquery GET ajax 调用多个页面

jquery GET ajax call for multiple pages

我正在使用 jQuery 的 $.get() 方法从外部 php 文件中检索数据。

代码会刷新数据,但是,因为我正在刷新两个外部文件,所以第二个 (messages.php) 的 html 将刷新,然后在第一个文件后约 300 毫秒再次刷新(tasks.php)刷新。

除了将 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();

您可以使用一种承诺,在两个调用都完成后调用刷新函数。我已经在下面更改了您的代码:

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() 函数在开始超时前至少被调用两次。

您可以使用$.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);
     });

 }