Итак, я работаю над индикатором выполнения сценария обработки CSV. dnc_scrubber.php
проходит через CSV и проверяет номер телефона на базу данных, возвращая сопоставленные и несогласованные данные в отдельных файлах. lines.php
возвращает общее количество обрабатываемых строк, в то время как progress.php
возвращает количество строк, которые были обработаны. Я использую эти два числа, чтобы создать процент работы, выполненной для функции progressbar jQuery.. Ямайка() вызов не будет завершен до предыдущего .ajax() звонок завершен?
Моя проблема заключается в том, что первый звонок .ajax()
в пределах doProgressBar()
не заканчивается, пока не закончится звонок dnc_scrubber.php
. Чтобы уточнить, при просмотре сетевого монитора в Chrome запрос делается на lines.php
одновременно с запросом на dnc_scrubber.php
, но ответ не получен, пока dnc_scrubber.php
не закончил работу. Вот соответствующий код:
$('#progressbar').progressbar();
$.ajax({
url: 'dnc_scrubber.php',
type: 'POST',
async: true,
data: querystring,
success: function(){
for (i = 0; i < files.length; i++){
$('#complete').append('<a href="process/MATCHED - ' + files[i] + '">MATCHED - ' + files[i] + '</a><br />');
$('#complete').append('<a href="process/SCRUBBED - ' + files[i] + '">SCRUBBED - ' + files[i] + '</a><br />');
}
}
});
function doProgressBar(){
$.ajax({
url: 'lines.php',
async: true,
dataType: 'json',
complete: function (rez) {
lines = JSON.parse(rez.responseText);
lines = parseInt(lines.lines);
console.log('dpg1 - lines: ' + lines);
$.ajax({
url: 'progress.php',
async: true,
dataType: 'json',
complete: function (rez1) {
prog = JSON.parse(rez1.responseText);
prog = parseInt(prog.progress);
console.log('dpg2 - lines: ' + lines + ' prog: ' + prog);
if (lines > prog){
var bar = (prog/lines) * 100;
var bar = Math.round(bar);
$('#progressbar').progressbar('option', 'value', bar);
setTimeout(doProgressBar(), 1000);
console.log('dpg3 - lines: ' + lines + ' prog: ' + prog + ' bar: ' + bar);
} else if (lines == prog){
$('#progressbar').progressbar('option', 'value', 100);
console.log('dpg3 - lines == prog');
}
}
});
}
});
}
setTimeout(doProgressBar(), 100);
Это нормальная функциональность? Это то, что я пытаюсь сделать невозможным? Я в недоумении ... заранее спасибо за помощь
EDIT: lines.php
session_start();
header('Content-type: application/json');
echo json_encode(array('lines' => $_SESSION['lines']));
progress.php
session_start();
header('Content-type: application/json');
echo json_encode(array('progress' => $_SESSION['lines_processed']));
увеличивает процессор CSV в $_SESSION['lines_proccessed']
по одному в конце процесс проверки для каждой строки
Сколько соединений является сервером, разрешающим в любой момент времени? – nobody
@nobody сервер разрешает очень большое количество соединений в соответствии с моими ИТ-ребятами. Это встроенный сервер разработки Ubuntu, работающий с лампой - с основными значениями по умолчанию. – jebriggsy