Как сделать так, чтобы Ajax автоматически обновлял тег <div>на странице? - PullRequest
0 голосов
/ 11 марта 2011

Я использую этот скрипт для получения новых комментариев через ajax.Однако метод setTimeout, похоже, не работает, поскольку мой контент не обновляется каждые 4000 миллисекунд.Любой совет?Когда я удаляю document.ready (функция) ({.....});это не загружает мою страницу вообще также

<script type="text/javascript"> 
$(document).ready(function(){
    function updateMsg() {
        $.ajax({
           url: "/recent/messages/{{ chat.key.id }}",
           cache: false,
           success: function(html){
                $("#chatcontent").html(html);
           }
        });
    setTimeout('updateMsg()', 4000);
    }
    updateMsg();
});
</script>

Ответы [ 3 ]

1 голос
/ 11 марта 2011

На самом деле похоже, что приведенный выше код будет работать, так как функция updateMsg () вызывается изначально, а затем setTimeout вызывается в конце этой функции каждый раз.Я подозреваю, что это параметр url , который неверен.

jАнди прав, код лучше записать как:

$(document).ready(function(){
    function updateMsg() {
        $.ajax({
           url: "/recent/messages/{{ chat.key.id }}",
           cache: false,
           success: function(html){
                $("#chatcontent").html(html);
           }
        });
    }

    setInterval(updateMsg, 4000);
});

Кроме того, я бы предложил вам использоватьМетод $ .load () вместо $ .ajax:

$('#chatcontent').load("/recent/messages/{{ chat.key.id }}");
1 голос
/ 11 марта 2011

setTimeout срабатывает только один раз после указанного времени ожидания.

Вам нужно вызвать setInterval() для повторного вызова метода.

Однако ваш url также выглядит недействительным. Эти { } и пробельные символы не допускаются в строке запроса. Кроме того, вы должны передать метод в качестве первого аргумента setTimeout и setInterval также.

setInterval(updateMsg, 4000);


После форматирования вашего кода я должен исправить себя. Вы звоните setTimeout в течение updateMsg(), и должно работать. Так что я думаю, это просто проблема с вашей строкой запроса. Тем не менее, вы все равно должны передать метод setTimeout:

$(document).ready(function(){
    function updateMsg() {
        $.ajax({
           url: "/recent/messages/" + chat.key.id,
           cache: false,
           success: function(html){
                $("#chatcontent").html(html);
           }
        });
    setTimeout(updateMsg, 4000);
    }
    updateMsg();
});
0 голосов
/ 11 марта 2011
<script type="text/javascript"> 

    var div;

    $(document).ready(function(){

        div = $('#chatcontent');

        setInterval(updateMsg, 1000);


    });


    function updateMsg() {

        //alert("hello");       

        $.ajax({
            url: "test.php",
            cache: false,

            success: function(html){

            $(div).append(html);

        }

        }); 

    }
</script>

<div id="chatcontent">hello</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...