Поочередное выполнение each ajax
Доброе время суток. Дорогие участники форума помогите.
Ка cделать так что бы: 1. Сначала выполнялась функция Each а потом только запрос ajax $(".add form").submit(function (z) { $(".idlength").each(function () { Выполняет функцию для каждого элемента набора. }); Пока не закончиться выполнение не запускать Ajax. z.preventDefault(); $.ajax({ какой то код. }); }); |
Vital9,
Удобнее тогда делать аякс синхронным, а не ассинхронным, $.ajax({какие-то коды,async: false}); Тогда аякс запрос будет выполняться в теле функции, точно так же последовательно, как и обычные коды яваскрипт Минусы - если запросы долгие и считываемые страницы большие, событийные отклик бразера может отсутствовать до .5 секунды Обычно такой код запускают после полной загрузки страницы Не желательно запускать более 5-7 синхронных запросов друг за другом (см выше) Разбивать на 5-7 и запускать по таймеру с интервалом 2-3сек |
Спасибо помогло.
Помогите Ещё. Можно как то что бы не передавать способом $("#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>'); } }); }); |
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) |
Теперь alert(stack) выводит массив а преобразовать в строку можно как то?
Вроде нашел решение использовал: var str = stack.join(''); alert(str); Такое решение подойдет или есть получше? |
Часовой пояс GMT +3, время: 23:05. |