Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Вызов функции каждую секунду. (https://javascript.ru/forum/jquery/4707-vyzov-funkcii-kazhduyu-sekundu.html)

can2zia 14.08.2009 17:47

Вызов функции каждую секунду.
 
Здравствуйте, я буквально вчера начал изучать jQuery и сразу же столкнулся с некоторыми проблемами, которых у меня не возникало при работе с чистым JavaScript. Помогите пожалуйста решить некоторые проблемы.

Собственно вопросы:
1) Как сделать так, чтобы функция readUserList() выполнялась каждую секунду автоматически? (Пробовал SetTimeout, который прекрасно работает в чистом JS, тут же происходит зацикливание и браузер падает. Так же пробовал использовать плагины таймеров для jQ, эффект тот же - зацикливание и падение браузера.) Подскажите как сделать правильно.
2) Можно ли заменить информацию в контейнере <div id="userlist"></div> не используя $("#userlist").empty();, т.е. вот так -
document.getElementById("userlist").innerHTML = UserList.item(0).firstChild.data;

Код:
<body>
<script type="text/javascript">
$(document).ready (
function readUserList()
  	{
	$.ajax({
   		type: "POST",
   		url: "u.php",
		dataType: 'xml',
		timeout: 3000,
   		success: function(xml)
		{
		$("#userlist").empty();
		var xmlUserlist = $(xml).find('response');
		$("#userlist").append(xmlUserlist.find('userlist').text());
   		},
		error: function()
	 	{
		$("#userlist").empty();
		$("#userlist").append("ERROR");
     	}
 	});
	}
);
</script>   
<div id="userlist"></div>
</body>

Kolyaj 14.08.2009 17:51

jQuery не отменяет чистый JavaScript.

B~Vladi 14.08.2009 17:58

Kolyaj, вот видишь... Библиотеки - зло... Надо вообще удалить эти ветки:)

Kolyaj 14.08.2009 17:59

Целиком и полностью согласен.

e1f 14.08.2009 18:13

А Вы куда пихаете SetTimeout? По идее, в Вашем случае надо сюда:
success: function(xml) {
    $("#userlist").empty();
    var xmlUserlist = $(xml).find('response');
    $("#userlist").append(xmlUserlist.find('userlist').text());
    // тут вставляем
    setTimeout(readUserList, 1000)
},
error: function() {
    $("#userlist").empty();
    $("#userlist").append("ERROR");
    setTimeout(readUserList, 1000)
}

can2zia 14.08.2009 18:15

Я понимаю, что не отменяет. Если у вас есть возможность, ответьте на мои вопросы пожалуйста.

can2zia 14.08.2009 18:18

Отлично, спасибо! =) Я куда только не пихал на самом деле, но так не делал. Не думал, что нужно так =)
С первым вопросом разобрались, а что со вторым? =)

e1f 14.08.2009 18:29

Я Вас немного обманул. Правильно будет так:
<body>
<script type="text/javascript">
var readUserListTimeout;
$(readUserList);
function readUserList() {
    $.ajax({
        type: "POST",
        url: "u.php",
        dataType: 'xml',
        timeout: 3000,
        success: function(xml) {
            var xmlUserlist = $(xml).find('response');
            /* Если у Вас в xmlUserlist.userlist есть теги, и
             * вставить надо с тегами, то пользуем .html, иначе .text
             */
            $("#userlist").html(xmlUserlist.find('userlist').text());
            // тут вставляем
            clearTimeout(readUserListTimeout)
            readUserListTimeout = setTimeout(readUserList, 1000)
        },
        error: function() {
            $("#userlist").text("ERROR");
            // тут вставляем
            clearTimeout(readUserListTimeout)
            setTimeout(readUserList, 1000)
        }
    });
}
</script>   
<div id="userlist"></div>
</body>

Urfin 14.08.2009 18:41

А по второму вопросу примерно так:
$("#userlist").html($("#userlist").find('div:first-child').html());


Часовой пояс GMT +3, время: 02:18.