Модал не записывает ссылку на файл PDF, созданный с помощью TCPDF, после вызова AJAX - PullRequest
0 голосов
/ 27 февраля 2019

Этот код работает.До сих пор я нашел только одно исключение, которое нарушает его, и это происходит только на живом сервере, на локальном хосте он все еще работает все время.

Итак, в чем проблема.

По сути, я генерирую PDF-файл с TCPDF (обратите внимание, что файл довольно большой, более 700 страниц), используя AJAX, и вызов возвращает ссылку на файл, который я затем добавлю к модальному, чтобы позволить пользователю выбрать, хочет ли ончтобы перейти к файлу или загрузить его.

Это код AJAX.

$('#stampa-file').on('submit', function(event)
{
    event.preventDefault();
    $.ajax({
        url:'stampa_file.php?act=stampa',
        method: 'POST',
        data: $('#stampa-file').serialize(),
        success: function(data)
        {                   
            if($.trim(data) == 'query_error')
            {
                alert('Qualcosa è andato storto. Riprova.');
            }
            else if($.trim(data) == 'stampa_error')
            {
                alert('Seleziona almeno una sezione');
            }
            else
            {                   
                $('#stampa-file')[0].reset();
                $('#loadingModal').modal('hide');
                $('#document-link').empty();
                $('#document-link-download').empty();
                $('#document-link').append('<a href="files/<?php echo $_COOKIE['NomeDB'];?>/'+ data +'" class="btn btn-sm btn-success" target="_blank" style="width: 120px;"><i class="fas fa-eye"></i> Visualizza PDF</a>');
                $('#document-link-download').append('<a href="files/<?php echo $_COOKIE['NomeDB'];?>/'+ data +'" class="btn btn-sm btn-success" target="_blank" style="width: 120px;" download><i class="fas fa-download"></i> Scarica PDF</a>');
                $('#viewFile').modal('show');
            }
        }
    });
});

Это код TCPDF.

    //I generate the PDF above this comment. Below only the link generation, PDF output and save the file into the database.
//Close and output PDF document
$replace = array(" ", "'");
$replacer = array("");
$nome = strtolower($query_ente['nome']);
$now = date("Y_m_d_H_i_s", time());         
$link = trim(str_replace($replace, $replacer, 'RDAT_'.$nome.'_'.$now.'.pdf'));
ob_clean();
$pdf -> Output($path_stampa_file.$link,'F'); 

$output = '';
$timestamp = time();
$result_inserimento = mysqli_query($mysqli, "INSERT INTO files (link, nome, timestamp, categoria) VALUES ('$link', '$link', '$timestamp', 'stampa_rdt')");
if($result_inserimento)
{
    /*Registro Attività*/
    include 'connessione_multi.php';
    session_start();
    $user_check = $_SESSION['login_user'];
    $result_user_info = mysqli_query($conn, "SELECT * FROM sessioni_login WHERE session_id='$user_check'");
    $query_user_info = mysqli_fetch_assoc($result_user_info);
    $session_user_id = $query_user_info['id_utente'];
    $id_utente = $session_user_id;
    $descrizione = 'ha eseguito la stampa del file: '.$link.'';
    $timestamp = time();
    $indirizzo_ip = $_SERVER['REMOTE_ADDR'];
    $result_attivita = mysqli_query($mysqli, "INSERT INTO attivita (id_utente, descrizione, timestamp, indirizzo_ip) VALUES ('$id_utente', '$descrizione', '$timestamp', '$indirizzo_ip')");

    $output = $link;
}
else
{
    $output = 'query_error';
}   
echo $output; 

Как я уже сказал, яу меня все работает нормально, но я не могу понять, почему в одном случае, для одного клиента и только на работающем сервере, а не на локальном, это дает сбой.В основном, когда это терпит неудачу, то, что я получаю в результате вызова AJAX, является пустым значением, и ссылка в модале выглядит следующим образом

www.mysite.com/files/customer_name/

вместо

www.mysite.com/files/customer_name/RDAT_customername_timestamp.pdf

Я пробовал кое-что, но я все еще не могу найти решение.

Вещи, которые я пробовал:

  • получитьссылку из базы данных, вызвав другой запрос AJAX внутри успешного первого вызова AJAX, напечатав ссылку в скрытом DIV внутри страницы и получив ссылку с помощью jQuery .text (), а затем добавьте ее в модальное состояние;

  • добавить ссылку в событие «complete» вызова AJAX вместо «success»;

  • получить ссылку из базы данных сразу после ее сохраненияв файле генерации TCPDF вместо использования одной и той же переменной $ link в том же файле;

  • удаляет каждое действие в событии успеха вызова AJAX и оставляет только события добавления;

Все эти тесты работают нормально все время, кромеЭто произойдет, если произойдет сбой на живом сервере.

У меня действительно нет другого выбора на данный момент.

...