Поочередное выполнение 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, время: 01:42. |