Синхронный AJAX (JS)

12
Segey
На сайте с 23.08.2005
Offline
404
1141

Как известно, у JS есть такое свойство из коробки, отсюда код ниже безбожно вешает систему, если в массиве 700-800 записей, сама функция function_for_15_second - содержит в себе AJAX запрос и выполняется достаточно долго. При таком виде у меня большим списком вылетает сначала список всех запросов к серверу, а после я сижу и жду окончания каждого. То есть если в массиве 10000 записей, то именно столько запросов обрушивается на сервер. Хочется сделать так, чтобы каждый раз при новом вызове функции не было перехода к следующему элементу массива и скрипт обязательно ждал полного ее выполнения... Как это сделать?

arr = data.split('<br />');

arr.forEach(function(entry){
function_for_15_second(entry);
});
Brexit - уже совсем рядом. (https://about-this-model.blogspot.com/2019/03/brexit.html)
Kot Matroskin
На сайте с 29.08.2007
Offline
185
#1

Вам нужно следующий ajax запрос делать после окончания предыдущего?

Как-то так


$( document ).ajaxComplete(function( event, xhr, settings ) {
if ( settings.url === "урл страницы куда стучите" ) {
.....
Я пользовался 11 разными хостингами. Есть только один ЛУЧШИЙ: ★ он тут ★ (https://goo.gl/R6v3zH) Пишите в ЛС за скидкой. VPS тоже в наличие ! Рекомендую.
Segey
На сайте с 23.08.2005
Offline
404
#2

Kot Matroskin,

Да, по сути это, а он внутри функции function_for_15_second(entry);

То есть это значит:

$(document).ajaxComplete(

function_for_15_second(entry);

)};

Kot Matroskin
На сайте с 29.08.2007
Offline
185
#3
Segey:

То есть это значит:

$(document).ajaxComplete(
function_for_15_second(entry);
)};

А можно ещё так

Без forEach.

Делайте запрос на первый элемент.

function_for_15_second(ary[0]);

Внутри аjax при завершение (success:function) вызывайте рекурсивно снова функцию но уже на элемент +1 (проверьте что есть такой)

Весь массив можно или GLOBAL или то-же передавать function_for_15_second(ary[0],ary);

danforth
На сайте с 18.12.2015
Offline
153
#4

На ajaxComplete глупая затея, т.к. и метрика, и аналитика постоянно шлют запросы.

Нужно рекурсивно вызовы делать.

Junior Web Developer
Segey
На сайте с 23.08.2005
Offline
404
#5

Kot Matroskin, Хитрый запрос, с ajaxComplete .... Правда у меня не AJAX запрос в прямом смысле, он обернут в функцию, которая ничего такого не возвращает в прямом смысле. Если бы как-то именно с функцией это провернуть... То есть ожидать return от нее в обязательном порядке, например? Иначе как я в своей конструкции получаю еще параметры AJAX запроса не очень понял....

C
На сайте с 04.02.2005
Offline
277
#6

myajax(){

'success' :if (condition) mayajax()

}

Kot Matroskin
На сайте с 29.08.2007
Offline
185
#7
Segey:
Kot Matroskin, Хитрый запрос, с ajaxComplete .... Правда у меня не AJAX запрос в прямом смысле, он обернут в функцию, которая ничего такого не возвращает в прямом смысле. Если бы как-то именно с функцией это провернуть... То есть ожидать return от нее в обязательном порядке, например? Иначе как я в своей конструкции получаю еще параметры AJAX запроса не очень понял....

Ну код то мы не видим. Логика верная, нужен возврат от функции после завершения работы, если возврат есть пускаем её снова и т.д.

Или внутри самой функции вызываем рекурсивно функцию после завершения задачи.

Segey
На сайте с 23.08.2005
Offline
404
#8

Kot Matroskin, Chukcha, Спасибо, после много написанного я сейчас попробую упаковать себе в голову иную логику... Да я не стал все копировать, но по сути у меня все уперлось в этот вызов в массиве, что мне до этого казалось очень удобным и простым...

---------- Добавлено 03.08.2017 в 22:41 ----------

Chukcha:
myajax(){
'success' :if (condition) mayajax()
}

Единственное, что удалось привести в рабочий вид, именно так и никак иначе он не захотел ждать пока выполнится функция... Странно все таки, неужели это так сложно, просто подождать результата кроме как undefined...

Segey
На сайте с 23.08.2005
Offline
404
#9

Слушайте, это кошмар, теперь жду по 20 минут :) Вот блин, мой VPS оказывается справлялся как мог на 5+, не зря я его ложил, так как у него уходило всего по 2-4 минуты, но когда запросов валиться стало одновременно уже 700+ он стал лежать после выполнения 500+. Ну и мера прямо была, чтобы последовательно его а не за раз напрягать таким...

S
На сайте с 30.09.2016
Offline
469
#10

Segey, я удивляюсь, хз как Вас народ понимает... Лично я почти ничего не понял, довольно бессвязно излагаете. И зачем Вы сидите и чего-то ждёте? Не проще ли прийти через пару часов и посмотреть готовый результат? И да, чтобы сервер не ложился, давайте ему отдыхать время от времени. Есть же setTimeout и setInterval, например.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий