簡體   English   中英

將 JSON 數據從 JS 傳遞到 PHP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM