Я пишу сценарий опроса для получения вновь созданных записей данных. Я хочу выполнить вызов каждые N
секунд.Асинхронный опрос JavaScript замораживает браузер с помощью setTimeout или setInterval
Я попытался setTimeout()
и setInterval()
запустить опрос асинхронно, но и замораживать браузер при выполнении функции Polling()
, которая на самом деле странно для меня.
Я вызываю функцию StarPolling()
, когда страница загружена. APICall()
Функция jQuery $.POST
Функция, которая работает хорошо - и асинхронно - в любых других ситуациях.
Это код, я использую с setTimeout()
var pollinginterval = 5000;
function StartPolling()
{
setTimeout(Polling, pollinginterval);
}
function Polling()
{
[... some code ...]
var api_call = 'API_URL';
var api_call_parameters = {
[...]
};
APICall(api_call, api_call_parameters, function(json_response)
{
/* this is the callback belongs to the $.POST request */
[... some code ...]
setTimeout(Polling, pollinginterval);
});
}
версия, которую я попытался с помощью setInterval()
очень похоже, за исключением рекурсивного вызова.
Я не могу использовать Workers или сокеты HTML5 для этого, потому что кросс-браузерная поддержка является обязательной.
Есть ли способ запустить опрос в РЕАЛЬНОГО асинхронным способом, или с помощью новой «нити» с JavaScript без замораживания браузера?
UPDATE: Это как APICall()
работает:
function APICall(call, parameters, success_callback)
{
$.post(apibase + "" + call,parameters)
.done(function(response){
try
{
var json_response = $.parseJSON(response);
}
catch(error)
{
[...]
}
if(json_response.header.status == "OK")
{
success_callback(json_response);
}
else if(json_response.header.status == "error")
{
[...]
}
})
.fail(function(error) {
[...]
});
}
UPDATE: Я тестирование опроса с нормальным и частным окном браузера (Firefox) в то же самое время, чтобы попробовать функциональность , Я только заметил, что проблема возникает только тогда, когда оба окна запускают опрос одновременно.
Может быть, это ошибка светлячок ...
Что именно делает 'APICall'? Вот в чем проблема. Это делает синхронный AJAX? – Pointy
@Pointy Это может быть, но маловероятно, поскольку он имеет обратный вызов? Может быть, он поддерживает оба? –
Я обновил свой вопрос с помощью функции APICall –