#javascript #ajax
#javascript #ajax
Вопрос:
Я пытаюсь проводить javascript-опрос сервера каждые (n) количество секунд, как бы я это сделал с помощью javascript?
Комментарии:
1. Что вы хотите знать? Кажется, вы уже знаете, что вам нужно использовать Ajax, поэтому я предполагаю, что вы сами с этим ознакомились. Что вы пробовали? Где вы застряли?
Ответ №1:
Предполагая, что вы используете jQuery:
var seconds = 5;
setInterval(function(){
$.ajax({
url: 'something.something',
data: 'something'
});
}, seconds * 1000)
Без jQuery:
var seconds = 5;
setInterval(function(){
some_ajax_function();
}, seconds * 1000)
Или как предлагает @Felix ниже:
var seconds = 5;
some_ajax_function(seconds);
function some_ajax_function(seconds){
..ajax
onsuccess: setTimeout(function(){some_ajax_function(seconds);},
seconds * 1000)
}
Комментарии:
1. сделайте то же самое, но с вашим методом ajax, отличным от jQuery, в функции
setInterval
2. Не очень хорошая идея. Новый запрос следует запускать после завершения предыдущего, чтобы избежать неожиданного поведения в случае, если один запрос занимает больше
n
секунд (что может случиться).
Ответ №2:
Это просто со следующей функцией
window.setInterval(«yourfunctionWithAjaxRequestETC», time_in_ms);});
Наслаждайтесь 🙂
Комментарии:
1. Не очень хорошая идея. Новый запрос следует запускать после завершения предыдущего, чтобы избежать неожиданного поведения в случае, если один запрос занимает больше
n
секунд (что может случиться).
Ответ №3:
во-первых, нам нужно создать объект нашего запроса ajax. Нам нужно учитывать разные браузеры.
var xmlhttp;
if (window.XMLHttpRequest)
{
// code for IE7 , Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
Теперь мы напишем нашу функцию для отправки запроса
function askData(){
xmlhttp.open("GET","myinfosource.php",true); // opens a Get request to the url myinfosource.php, and sets the request to asynchronuous.
xmlhttp.send(); //sends the request
}
Теперь давайте напишем обработчик событий, который изменяет HTML, когда возвращается информация.
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 amp;amp; xmlhttp.status==200) //if we reveived data (readystate 4 means that information was received. status 200 is the status of the HTTP request, where 200 means 'ok'.
{
//insert data into the div you want.
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
И, наконец, мы установили интервал для первой функции, которую мы написали, чтобы она запускалась каждые x секунд.
setInterval('askData',10000);
это обновит ваши данные.
Надеюсь, теперь вы понимаете, почему большинство людей используют фреймворк, такой как jquery, для использования AJAX. Одним из основных преимуществ фреймворков js является то, что они обходят несовместимости браузеров, так что вы, как разработчик, можете сосредоточиться на текущей задаче.
Ответ №4:
Я предполагаю, что существует сервлет с шаблоном URL / updateCount, настроенным в web.xml для предоставления динамических данных / контента на странице jsp есть элемент div countStatDiv.
Следующий код обновляет содержимое countStatDiv каждые 30 секунд с использованием метода GET, а значение переменной seconds может быть изменено в соответствии с необходимостью:
<script>
var request;
var seconds=30;
function getRequestObject(){
setInterval(function() {sendRequest();},seconds*1000);
if (window.ActiveXObject){
return (new ActiveXObject("Microsoft.XMLHTTP"));
} else if (window.XMLHttpRequest){
return(new XMLHttpRequest());
} else {
return (null);
}
}
function sendRequest(){
request = getRequestObject();
request.onreadystatechange = handleResponse;
request.open("GET", "../UpdateCount", true);
request.send(null);
}
function handleResponse(){
if((request.readyState == 4)amp;amp;amp;amp;(request.status == 200)){
var serverResponse = request.responseText;
var statCtrl=document.getElementById("countStatDiv");
statCtrl.innerHTML=serverResponse;
}
}
</script>