在AJAX调用之后,Modal不会写入使用TCPDF生成的PDF文件的链接

时间:2019-02-27 15:24:05

标签: php jquery ajax modal-dialog tcpdf

此代码有效。到目前为止,我只发现了一个打破它的异常,它仅在实时服务器上发生,在localhost上,它始终可以正常工作。

那是什么问题。

基本上,我使用AJAX使用TCPDF生成PDF文件(请注意该文件非常大,超过700页),并且调用返回该文件的链接,然后将其附加到模式中,以使用户选择是否他想转到文件或下载文件。

这是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()获得该链接,然后附加它到模式;

  • 在AJAX调用的“ complete”事件中添加链接,而不是“ success”;

  • 在将链接保存到TCPDF生成文件后立即从数据库获取链接,而不是在同一文件中使用相同的变量$ link;

  • 删除了AJAX调用成功事件中的每个动作,只保留了append事件;

所有这些测试一直都可以正常工作,除了一次在实时服务器上失败。

目前我真的没有其他选择。

0 个答案:

没有答案