2016-02-18 2 views
1

Я пытаюсь создать сайт, на котором люди делятся файлами, в настоящее время я пытаюсь показать, находится ли пользователь в сети или нет. Для этого требуется запрос ajax, но у меня уже есть таймер и запрос ajax, работающий каждые 5 секунд. Что я могу сделать, чтобы оба они запускались одновременно. Вот мой код:Два вызова ajax с setinterval на той же странице

setInterval(function() {checkiframe(); },5000); 
function checkonline(){ 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == 4 && xhttp.status == 200) { 
      alert("true"); 
     } 
    }; 
    xhttp.open("GET", "dbcheckpost.php?u=true", true); 
    xhttp.send(); 
} 
function checkiframe(){ 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      if(xmlhttp.responseText === "true"){ 
      location.reload(); 
      } 
     } 
    }; 
    xmlhttp.open("GET", "dbcheckpost.php?last=<?php echo $last; ?>", true); 
    xmlhttp.send(); 
    checkonline(); 
} 

Я также попытался запустить два интервала, но только один из них работают.

EDIT: Я забыл упомянуть, что я хочу, чтобы они работали в разное intervals.One составляет 5 секунд, а другие 10 минут

+2

Просто дайте вам совет. В реальном мире это делается с помощью веб-сокетов. Не интервалы. –

+0

Вы всегда хотите, чтобы оба запроса отправлялись одновременно? Вы хотите, чтобы они отправляли offseting? Вы хотите, чтобы кто-то подождал, пока другой ответит? –

+1

@MaxBaldwin У меня есть много «реальных приложений мира», которые используют опрос. Особенно, если они работают на общих серверах. –

ответ

2

просто добавить обе функции в SetTimeout анонимной функции

setInterval(function() { 
    checkiframe(); 
    checkonline(); 
},5000); 

И удалите «checkonline» из «checkiframe». Если вы whant для checkOnline быть выполнен после checkiframe, то он должен быть помещен в функцию обратного вызова

function checkiframe(){ 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
     checkonline(); 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      if(xmlhttp.responseText === "true"){ 
      location.reload(); 
      } 
     } 
    }; 
    xmlhttp.open("GET", "dbcheckpost.php?last=<?php echo $last; ?>", true); 
    xmlhttp.send(); 
} 

И если вы хотите, чтобы ваша функция будет выполняться независимо друг от друга использовать для разделения setInterval. Вот пример кода, который я тестировал.

function f1(){ 
    console.log('1s'); 
} 
setInterval(f1, 1000); 
function f2(){ 
    console.log('5s'); 
} 
setInterval(f2, 5000); 
+0

Но корректно также вызывать 'checkonline' в функции' checkiframe'. – Hydro

+0

Возможно, функция checkiframe() ajax функции всегда возвращает responseText = true, а iframe перезагружается с помощью location.reload() ;? – kodvin

+0

Тогда запрос 'checkonline' должен вызываться, когда делается запрос на' checkiframe'. В ИСТИННОМ ВРЕМЕНИ БУДЕТ ДЕЙСТВОВАТЬ 2 запроса В ОДНОМ ВРЕМЕНИ; – Hydro