Я создал очень простой пример. Я пытаюсь запрашивать значение с моего сервера каждые X секунд, в этом случае я просто хочу получить случайное число каждую секунду.
Это решение работает, но, к сожалению, кажется, что через некоторое время возникает бесконечный цикл, который приводит к сбою. Я также получаю более 100 тысяч ошибок через некоторое время net::ERR_INSUFFICIENT_RESOURCES
,
request_data(1000);
function request_data(intervall) {
$.post('ajax.php', {
cmd: "get_random_number"}, function (returned_data, status) {
if (status === "success") {
$("#result_output").html(returned_data);
setInterval(function() {
request_data(intervall);
}, intervall);
}
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="result_output></p>
// ajax.php
<?php
$cmd = filter_input(INPUT_POST, "cmd");
if (isset($cmd) && $cmd == "get_random_number") {
echo rand(5, 15);
}
Какое лучшее решение для достижения этой цели?
Вы можете сделать setInterval, а затем внутри этого сделать вызов ajax. Одним из параметров, которые вы можете установить в $ .ajax, является тайм-аут — так что вы можете остановить наложение нескольких вызовов ajax и вызвать проблемы.
$.ajax({
url: '',
type: '',
data: {},
timeout: 3000,
success: function(data){
// do stuff
}
});
Для получения дополнительной информации о параметрах см. http://api.jquery.com/jQuery.ajax/
Как указал Дерек, это потому, что вы делаете 2 ^ n вызовов, поскольку setInterval находится внутри самой функции.
Попробуйте это так вместо этого
window.setInterval(1000, request_data);
function request_data() {
$.post('ajax.php', {
cmd: "get_random_number"}, function (returned_data, status) {
if (status === "success") {
$("#result_output").html(returned_data);
}
});
}
Я решил это, просто заменив setInterval
с setTimeout
,