Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поочередное выполнение each ajax (https://javascript.ru/forum/misc/61467-poocherednoe-vypolnenie-each-ajax.html)

Vital9 19.02.2016 17:57

Поочередное выполнение each ajax
 
Доброе время суток. Дорогие участники форума помогите.
Ка cделать так что бы:
1. Сначала выполнялась функция Each а потом только запрос ajax
$(".add form").submit(function (z) {
        $(".idlength").each(function () {

            Выполняет функцию для каждого элемента набора.

        });

        Пока не закончиться выполнение не запускать Ajax.

        z.preventDefault();

        $.ajax({
          
         какой то код.

        });
    });

Deff 19.02.2016 19:00

Vital9,
Удобнее тогда делать аякс синхронным, а не ассинхронным,
$.ajax({какие-то коды,async: false});

Тогда аякс запрос будет выполняться в теле функции, точно так же последовательно, как и обычные коды яваскрипт
Минусы - если запросы долгие и считываемые страницы большие, событийные отклик бразера может отсутствовать до .5 секунды
Обычно такой код запускают после полной загрузки страницы
Не желательно запускать более 5-7 синхронных запросов друг за другом (см выше)
Разбивать на 5-7 и запускать по таймеру с интервалом 2-3сек

Vital9 19.02.2016 23:12

Спасибо помогло.
Помогите Ещё.
Можно как то что бы не передавать способом $("#sss").append а передать в какую то переменную и потом получить .html()
Если можно бонус плюс(сократить код)
$(".idlength").each(function (a) {
            var text = $(this).find("textarea[name='content']").val();
            var aFormData = new FormData();
            aFormData.append("img", $(this).find('#img').get(0).files[0]);
            $.ajax({
                type: "post",
                url: "/ajax/add/",
                data: aFormData,
                contentType: false,
                cache: false,
                async: false,
                processData: false,
                success: function (a) {
                    $("#sss").append('<p>' + text + '</p>');
                    var z = a.replace(/"([^"]*)"/g, '$1');
                    $("#sss").append('<p><img src="/media/1/' + z + '"></p>');
                }
            });
        });

Deff 20.02.2016 01:57

function myAjax(link,Frm) {
   return $.ajax({type: "post",url:link,data:Frm,cache:false,async:false}).responseText;
}

$(".idlength").each(function (a) {
            var text = $(this).find("textarea[name='content']").val();
            var aFormData = new FormData();
            aFormData.append("img", $(this).find('#img').get(0).files[0]);
            alert('/media/1/'+myAjax("/ajax/add/",aFormData).replace(/"([^"]*)"/g, '$1'));
});

По идее, мон склaдывать полученное в некий стек - массив(вместо alert)
var stack = [];
function myAjax(link,Frm) {
   return $.ajax({type: "post",url:link,data:Frm,cache:false,async:false}).responseText;
}
$(".idlength").each(function (a) {
            var text = $(this).find("textarea[name='content']").val();
            var aFormData = new FormData();
            aFormData.append("img", $(this).find('#img').get(0).files[0]);
            stack.push('/media/1/'+myAjax("/ajax/add/",aFormData).replace(/"([^"]*)"/g, '$1'));
});
alert(stack)

Vital9 20.02.2016 13:16

Теперь alert(stack) выводит массив а преобразовать в строку можно как то?
Вроде нашел решение использовал:
var str = stack.join('');
alert(str);
Такое решение подойдет или есть получше?


Часовой пояс GMT +3, время: 23:05.