Меня немного смущает идея асинхронных и синхронных вызовов ajax. Можно ли сделать один вызов ajax асинхронно с последующим синхронным вызовом ??
Вот мой сценарий,
Я пытаюсь создать индикатор выполнения в реальном времени, чтобы показать отсутствие данных, вставленных там, где postdata () вставляет данные в таблицу, в то время как функция getprocess () возвращает текущее количество данных, вставленных для отображения в индикаторе выполнения.
function getprogress(data){
console.log(data);
$.ajax({
method: 'POST',
url: '<?php echo base_url()?>setting/processoffline/getprogressdata',
data:{ table:data },
dataType: 'json',
async: false,
success: function(val) {
var off=parseFloat(Number(val.dataoffline),10);
var on=parseFloat(Number(val.dataonline),10);
var percent=Math.round((off/on)*100);
// $('#'+data+'success').addClass('hidden');
console.log('offline- '+off);
console.log('online- '+on);
$('#'+data+'progressbar').css('width',percent+"%");
$('#'+data+'progressbar').html(percent+"%" + off+' out of '+on );
if(percent=='100'){
console.log(percent);
// $('#'+data+'progressbox').addClass('hidden');
$('#'+data+'success').removeClass('hidden');
$('.download').removeAttr('disabled','disabled');
// clearTimeout();
}
console.log(postComplete);
if (!postComplete)
setTimeout( function() { getprogress(data); }, 1500);
} ,
error: function() {
if (!postComplete){
setTimeout( function() { getprogress(data); }, 1500);
}
}
});
}
function postdata(data)
{
// if(!data)$.ajax({
method: 'POST',
url: '<?php echo base_url()?>setting/processoffline/processdata',
data:{ master_table:data },
dataType: 'html',
success: function() {
postComplete = true;
},
error: function() {
postComplete = true;
}
});
}
Теперь вот как я вызываю эти функции для использования
$(this).parent('td').parent('tr').siblings('tr').children('td').find('input:checked').each(function(){
data=$(this).attr('id');
postdata(data);
$('#'+data+'success').addClass('hidden');
$('#'+data+'progressbox').removeClass('hidden');i++;
getprogress(data);
if(!postComplete)
setTimeout( function() { getprogress(data);}, 2);
Здесь функция postdata () вызывается несколько раз в цикле асинхронно, мой случай заключается в том, что поскольку цикл может быть неограниченным числом, это может запустить множество параллельных процессов, которые могут повесить мою систему, поэтому. Мне нужно запустить следующий цикл только для postdata () когда предыдущий процесс завершен. Функция postdata () делает ajax-вызов для функции php, что требует много времени. Поэтому я использую асинхронное определение функции postdata (), чтобы я мог вызывать функцию getprogress () параллельно, но (не знаю, если это возможно) Я хочу вызывать getprocess ajax call синхронно, чтобы цикл ожидал окончания значения, возвращаемого getprogress. Таким образом, я могу начать новый процесс в ajax call только после завершения предыдущего процесса.
Я хочу знать, если это возможно или нет, и если нет, как я могу справиться с этой проблемой. Извините за плохой английский, и если неясно, пожалуйста, прокомментируйте, и я придерживаюсь этого в течение 3-4 дней.
заранее спасибо
Задача ещё не решена.
Других решений пока нет …