2013-08-25 3 views
0

I.m в настоящее время после учебника о том, как загрузить контент из базы данных MYSQL без перезагрузки страницы.Использование функции setTimeout в AJAX

Я просто хочу понять использование setTimeout в этом коде. Для чего это? Я попытался удалить эту часть, и ajax все еще работает. Зачем вам нужно задерживать задание, не означает ли ajax обновление в реальном времени?

$(document).ready(function() { 
    done(); 
}); 

function done() { 
    setTimeout(function() { 
     updates(); 
     done(); 
    }, 200); 
} 

function updates() { 
    $.getJSON("update.php", function (data) { 
     $("ul").empty(); 
     $.each(data.result, function() { 
      $("ul").append("<li>ID: " + this['msg_id'] + "</li><br /><li>ID: " + this['msg'] + "</li><br />"); 
     }); 
    }); 
} 
+2

ссылка SetTimeout: https://developer.mozilla.org/en/docs/Web/API/window.setTimeout –

+0

@JanDvorak удалить что :) –

+0

@TusharGupta изменено, чтобы не ссылаться на ваш комментарий ;-) –

ответ

2

В этом коде setTimeout используется для получения обновлений с сервера 5 раз в секунду (что, вероятно, слишком часто). Без него он будет получать обновления только один раз (если updates() когда-либо называется).

0

SetTimeout появляется в функции done(), и когда setTimeout выполняет (после 200 мс), он вызывает себя рекурсивно. Таким образом, функция updates() будет вызываться каждые 200 мс для жизни страницы.

Если update.php - это какой-то поток сообщений, тогда этот код требует, чтобы setTimeout непрерывно проводил опрос новых сообщений и добавлял их в список.

0

settimeout и setTimeout

В коде setTimeout вызовы done функции и updates() функции после каждого 200 millisecond

function done() { 
    setTimeout(function() { 
     updates(); 
     done(); 
    }, 200); 
} 

как если вы удалите setTimeout он все еще работает

function done() { 
      updates(); 
      done(); 
    } 

как это создает в конечная петля done функции

, но без задержки, которая была вызвана setTimeout

0

Функция setTimeout принимает функцию и номер в качестве параметра, он выполняет функцию после того, как заданное число миллисекунд.

В вашем коде это означает: функция updates() вызывается каждые 200 миллисекунд - 5 раз в секунду.

Подробнее об этом здесь: https://developer.mozilla.org/en/docs/Web/API/window.setTimeout

+0

для другой ссылки – Tuxes3

0

Это используется для задержки рекурсию на 200 мс. Если вы удалите тайм-аут, цикл будет работать одинаково, но вы, вероятно, слишком долго не исчерпали память.

Более интересным и поучительным примером этого является переход к обновлению в качестве обратного вызова и называть его успешным.

0

Ваш код использует setTimeout для опроса независимо от ресурса, возвращающего результат.

Эта версия будет выполнена только в случае успеха.

Конечно, если вы хотите, чтобы ваш код всегда проводил опрос, несмотря на то, что он может восстановиться после ошибки на сервере, вы не должны меняться.Но 200 MS в любом случае слишком часто

$(function() { 
    updates(); 
}); 


function updates() { 
    $.getJSON("update.php", function (data) { 
     $("ul").empty(); 
     $.each(data.result, function() { 
      $("ul").append("<li>ID: " + this['msg_id'] + "</li>"+ 
          "<li> " + this['msg'] + "</li>"); 
     }); 
     setTimeout(updates, 10000); // do it again in 10 seconds 
    }); 
} 
+0

Тот, кто отказался от этого и не оставил комментария, более чем бесполезен. – mplungjan

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