Как отправить несколько одинаковых ajax запросов и обработать полученные данные?

Совсем недавно столкнулся с серьезной проблемой: я разрабатывал приложение для ВКонтакте и мне нужно было отправить несколько одинаковых запросов на сервер ВК, потом обработать полученные данные. Сначала я не увидел в этом ни каких проблем: написать запрос и засунуть его в цикл. Но не тут-то было. Я не учел того, что js невозможно остановить(и он не ждет ответа ajax), получилось так, что пока первый запрос еще даже не получил ответ, цикл уже отработал и сделал кучу запросов. Возможно в другой ситуации я не обратил на это внимание, но в приложениях ВК так делать нельзя.

Поскольку есть ряд подводных камней, самые явные это то, что нельзя отправлять к серверу ВК больше 3х запросов в секунду, и то, что нужно дождаться ответа сервера, получить данные, в некоторых случаях спросить что-то у пользователя, а уже потом делать второй запрос. В связи с этими «заморочками» пришлось ломать голову, как остановить js код. Самый оптимальный вариант, который я придумал, это использования рекурсии. Для тех кто не знает, что это такое рекурсия: простыми словами — это когда функция вызывает сама к себя.
В этой статье я не буду приводить рабочий исходник, а просто сделаю набросок:

function testfunc($par){
 // делаем ajax запрос, и в случае успешного или неудачного запроса
 // делаем какие-то операции, после их выполнения
 // можно сделать счетчик для рекурсии
 $par ++;
 // и при выполнения некоторых условий либо вызываем testfunc($par);
 if ($par<10){
  testfunc($par);
 }
 // либо выходим из рекурсии
}
Рассказать друзьям:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*