[英]Passing JSON data from JS to PHP
尋找各種解決方案,但還沒有找到。 我被下面的代碼困住了,我的直覺是到達 hphp 腳本的 jsondata 是空的,但我不知道如何調試,因為這個腳本只在后台運行。
Javascript:
var pdfdata = {};
function SendMail(){
let el = document.getElementById('content');
let el2 = document.getElementById("tilaus");
let opt = {
margin: 1,
filename: 'myfile.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'mm', format: 'A4', orientation: 'portrait' }
};
html2pdf().set( opt ).from( el ).toPdf().output('datauristring').then(function( pdfAsString ) {
pdfdata["tilaus"] = {
'fileDataURI': pdfAsString,
};
//$.post( "../Laskuri/php/send_script.php", data);
} );
html2pdf().set( opt ).from( el2 ).toPdf().output('datauristring').then(function( pdfAsString ) {
pdfdata["tilausvahvistus"] = {
'fileDataURI2': pdfAsString,
};
} );
var jsondata = JSON.stringify(pdfdata);
console.log( JSON.stringify(pdfdata, null, " ") );
$.post( "../Laskuri/php/send_script.php", jsondata);
}
然后在 PHP 端:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require './src/Exception.php';
require './src/PHPMailer.php';
$array = json_decode($_POST["jsondata"],true);
$mail = new PHPMailer;
$mail->setFrom( 'asiakas@kajonsteel.fi', 'website' );
$mail->addAddress( 'myynti@kajonsteel.fi', 'Kajon Steel Oy' );
$mail->Subject = 'Tilaus';
$mail->Body = 'Kiitos tilauksesta. Liitteenä tilausvahvistus ja tilaus.';
$pdfdoc = $array->tilaus->fileDataURI;
$b64file = trim( str_replace( 'data:application/pdf;base64,', '', $pdfdoc ) );
$b64file = str_replace( ' ', '+', $b64file );
$decoded_pdf = base64_decode( $b64file );
$pdfdoc2 = $array->tilausvahvistus->fileDataURI2;
$b64file2 = trim( str_replace( 'data:application/pdf;base64,', '', $pdfdoc2 ) );
$b64file2 = str_replace( ' ', '+', $b64file2 );
$decoded_pdf2 = base64_decode( $b64file2 );
$mail->addStringAttachment($decoded_pdf2, "tilausvahvistus.pdf");
$mail->addStringAttachment($decoded_pdf, "tilaus.pdf");
$mail->isHTML( true );
$mail->send();
?>
我是否正確訪問了 jsondata? console.log 第一次給出了一個空集,但是如果我再次單擊激活 sendMail() 的按鈕,那么 console.log 確實顯示已正確填充(第二個 email 也損壞了 pdf)。
我設法使用一種解決方法來解決這個問題。 我遇到的問題是我兩次調用相同的 php 腳本,每次都發布一個值。 我通過啟動 session 變量並在發送 email 之前等待它們“填滿”來解決此問題。
JS:
function SendMail(){
let el = document.getElementById('content');
let el2 = document.getElementById("tilaus");
let opt = {
margin: 1,
filename: 'myfile.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'mm', format: 'A4', orientation: 'portrait' }
};
html2pdf().set( opt ).from( el ).toPdf().output('datauristring').then(function( pdfAsString ) {
//pdfdata.tilaus = {
let data={
'fileDataURI': pdfAsString,
};
$.post( "../Laskuri/php/send_script.php", data);
} );
html2pdf().set( opt ).from( el2 ).toPdf().output('datauristring').then(function( pdfAsString ) {
let data = {
'fileDataURI2': pdfAsString,
};
$.post( "../Laskuri/php/send_script.php", data);
} );
}
PHP:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require './src/Exception.php';
require './src/PHPMailer.php';
session_start();
$mail = new PHPMailer;
$mail->setFrom( 'asiakas@kajonsteel.fi', 'website' );
$mail->addAddress( 'myynti@kajonsteel.fi', 'Kajon Steel Oy' );
$mail->Subject = 'Tilaus';
$mail->Body = 'Kiitos tilauksesta. Liitteenä tilausvahvistus ja tilaus.';
if(isset($_POST["fileDataURI"])){
$_SESSION["fileDataURI"] = $_POST["fileDataURI"];
}
$pdfdoc = $_SESSION["fileDataURI"];
$b64file = trim( str_replace( 'data:application/pdf;base64,', '', $pdfdoc ) );
$b64file = str_replace( ' ', '+', $b64file );
$decoded_pdf = base64_decode( $b64file );
if(isset($_POST["fileDataURI2"])){
$_SESSION["fileDataURI2"] = $_POST["fileDataURI2"];
}
$pdfdoc2 = $_SESSION["fileDataURI2"];
$b64file2 = trim( str_replace( 'data:application/pdf;base64,', '', $pdfdoc2 ) );
$b64file2 = str_replace( ' ', '+', $b64file2 );
$decoded_pdf2 = base64_decode( $b64file2 );
$mail->addStringAttachment($decoded_pdf2, "tilausvahvistus.pdf");
$mail->addStringAttachment($decoded_pdf, "tilaus.pdf");
$mail->isHTML( true );
if(!empty($decoded_pdf) and !empty($decoded_pdf2)){
$mail->send();
session_destroy();
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.