Napotkałem inny problem.
Generanie robię tak, że po xajaxie odpalam funkcję pobierającą listę faktur i ta zwraca mi wywyłanie funkcji javascriptowej i jako argument podaje tablicę faktur.
w templejtece:
var stop = false;
function stopPrinting() {
console.log('stopPrinting executed')
stop = true
}
function printInvoice(ids){
console.log('dostalem dane', ids)
if (ids.length < 1) {
alert('No invoices found.')
return
}
ids.forEach(function (id) {
if (stop === true) {
console.log('jest zatrzymane');
return;
}
console.log('sprawdzam stop:', stop)
xajax_printInvoice(id)
})
stop = true;
}
function fiscalize() {
if ($('form[name="fiscalizeinvoices"] select[name="division"]').val() == '0') {
alert('{trans("Division not selected!")}');
return;
}
stop = false
xajax_getInvoices(JSON.stringify($('form[name="fiscalizeinvoices"]').serializeArray()));
}
funkcję fiscalize() odpalam z "przycisku" po wybraniu wartości z formularza
teraz w php mam :
function getInvoices($form){
$obj = new xajaxResponse();
$formArray = json_decode($form, true);
$data = [];
foreach ($formArray as $item){ // item['name] $item['value']
$data[$item['name']] = $item['value'];
}
//to wyliczenia dat itp
$invoices = LMSHelper::getInvoices($date['from'], $date['to'],
htmlspecialchars($data['customer_type']),
(int)$data['customer'],
(int)$data['division'],
(int)$data['group'],
(isset($data['groupexclude']) ? true : false));
$obj->call('printInvoice', $invoices);
return $obj;
}
function printInvoice($id){
$obj = new xajaxResponse();
if ($id == '277333'){
$obj->call('stopPrinting');
} else {
$obj->append('novitusLog', 'innerHTML', '<p>Wydrukowana faktura: '.$id.'</p>');
}
return $obj;
}
w funkcji printInvoice robię testowe i jeśli id faktury, docelowo w tym miejscu błąd, i jeśli pojawi się błąd chce przestać drukować resztę faktur.
problem mój polega, że jak zwracam $obj->call('printInvoice', $invoices) to przeglądarka wywołuje tę funkcję tyle razy ile jest faktur a zwrotki przychodzą po jakimś czasie. chciałbym aby funkcja w javascript printInvoice() zaczekała na to co zwróci xajax_printInvoice(id) i dopiero wtedy szła dalej, czyli by ta funkcja była synchroniczna. Jak to osiągnąć?