2015-02-17 3 views
0

Я использую метод jQuery $.get() для извлечения данных из внешнего php-файла.jquery GET ajax вызов для нескольких страниц

Код обновляет данные, однако, поскольку я обновляю два внешних файла, html для второго (messages.php) будет обновляться, а затем обновляться снова около 300 мс после обновления первого файла (tasks.php).

Помимо комбинирования задач.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

Вы можете использовать $.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

Вы можете использовать свое обещание, которое вызывает функцию обновления после завершения обоих вызовов. Я изменил свой код ниже:

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() не была вызвана, по крайней мере в два раза, прежде чем он начнет тайм-аут.

Смежные вопросы