jquery GET ajax调用多个页面

时间:2015-02-17 18:12:46

标签: jquery ajax get

我正在使用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();

2 个答案:

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