此代码有效。到目前为止,我只发现了一个打破它的异常,它仅在实时服务器上发生,在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事件;
所有这些测试一直都可以正常工作,除了一次在实时服务器上失败。
目前我真的没有其他选择。