Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.02.2016, 17:57
Интересующийся
Отправить личное сообщение для Vital9 Посмотреть профиль Найти все сообщения от Vital9
 
Регистрация: 05.03.2015
Сообщений: 15

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

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

        });

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

        z.preventDefault();

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

        });
    });
Ответить с цитированием
  #2 (permalink)  
Старый 19.02.2016, 19:00
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

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

Последний раз редактировалось Deff, 19.02.2016 в 19:03.
Ответить с цитированием
  #3 (permalink)  
Старый 19.02.2016, 23:12
Интересующийся
Отправить личное сообщение для Vital9 Посмотреть профиль Найти все сообщения от Vital9
 
Регистрация: 05.03.2015
Сообщений: 15

Спасибо помогло.
Помогите Ещё.
Можно как то что бы не передавать способом $("#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>');
                }
            });
        });
Ответить с цитированием
  #4 (permalink)  
Старый 20.02.2016, 01:57
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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)

Последний раз редактировалось Deff, 20.02.2016 в 02:02.
Ответить с цитированием
  #5 (permalink)  
Старый 20.02.2016, 13:16
Интересующийся
Отправить личное сообщение для Vital9 Посмотреть профиль Найти все сообщения от Vital9
 
Регистрация: 05.03.2015
Сообщений: 15

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

Последний раз редактировалось Vital9, 20.02.2016 в 13:26. Причина: нашел решение в google
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Web Worker и Ajax. Параллельное выполнение Naararouter Общие вопросы Javascript 5 08.11.2015 12:24
Выполнение скриптов в AJAX Mikhail1989 jQuery 3 31.07.2015 04:21
Последовательное выполнение Ajax запросов. jgunchenko AJAX и COMET 1 07.05.2014 12:50
Как приостановить выполнение скрипта до получения результата AJAX запроса? Хиросим AJAX и COMET 9 31.10.2011 10:56
Выполнение скрипта через AJAX Dave Общие вопросы Javascript 1 05.05.2011 23:07