При клике по иконке пользователем на сервер предается некий emploee_id на основании которого сервер делает вычисления и если эти вычисления верны, в новой вкладке браузера должен открыться pdf документ(что на данный момент и происходит).
Но если валидация не будет пройдена, то пользователя необходимо уведомить всплывающим сообщением с описанием ошибок.
Вот тут у меня не получается сообразить, как это сделать. Вся проблема в том, что на клиенте responseType = 'blob' - при изменении которого, например на json, документ пдф открывается с ошибками.
Во всем приложении данные отправляются с сервера в виде json:
{"status_code": 200, "status": "success", "text": null, "data": [{...},...]}.
Но нижележащий код у меня не получается под такой формат подогнать.
PS: Я пробовал конвертировать конечную выдаваемую строку сервером через base64_encode и упаковывать все в json вида:
{
"status": "success",
"binary_data": base64_encode($string)
}
а на клиенте декодировать через window.atob(string)и подставлять это в конструктор new Blob(), но ничего не выходит, документ открывается с ошибками
Код сервера:
// здесь происходит несколько этапов валидации по различным правилам
// в результате чего в $errors формируется строка из ошибок
...
if(!$this->form_validation->run('mto_rules'))
{
$errors .= validation_errors();
}
if($errors !== '')
{
// здесь нужно как-то уведомить пользователя об ошибках
// во всем приложении реализовано:
// $response['status_code'] = 200;
// $response['status'] = 'error';
// $response['text'] = $errors;
// ....
// тут могут быть вычисления какие-либо
// ....
// и в самом конце метода, после всех проверок
// $this->output->set_status_header($response['status_code'])
// ->set_output($response);
}
// Формируем некий html и переводим в pdf библиотекой TCPDF
...
...
$pdf->writeHTML($html, true, false, false, false, '');
// отдаем бинарную строку - ВАЖНО!!!
echo $pdf->Output('', 'S');
Код клиента:
var xhr = new XMLHttpRequest()
xhr.open('GET', 'my.php?emploee_id=' + emploee_id, true)
xhr.responseType = 'blob'
xhr.onload = function(e) {
var blob = new Blob([this.response],{type: 'application/pdf'})
var url = window.URL.createObjectURL(blob)
window.open(url)
}
xhr.send()
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть такая функция, которая разбивает строку на части заданной длинны:
Вообщем такая проблема, есть проект на yii2 там есть категории с бесконечной вложенностью и такая задача вывести все товары из данной под категории...
Не удается спарсить данные с https://anistarme/
Нужно отформатировать номер телефона в формате +XXX-YYY-ZZZZZZ и распределить по аргументам номера страны, региона и области, при этом номера между...