Wordpress-通过Ajax保存到服务器

时间:2019-07-25 19:18:03

标签: php jquery ajax wordpress

我的wordpress网站上有一个表单,该表单使用jsPDF转换为PDF,然后在提交时应保存到服务器。

我收到一条成功消息,但PDF似乎没有保存到所需的文件夹。我找不到PDF的位置,甚至根本找不到它

代码

在functions.php中注册Ajax命令:

function eazy_scripts() {
wp_register_script('js-pod', get_stylesheet_directory_uri() . '/js/POD.js', array('jquery'),'1.1', true);
wp_enqueue_script('js-pod');
wp_localize_script( 'js-pod', 'jspod', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}

add_action( 'admin_enqueue_scripts', 'eazy_scripts' );

JS

$( "#pdfsubmit" ).click(function() {
            alert("Submitted");
            sendToServer();
        });

        function sendToServer() {

            console.log("#pdfsubmit clicked");
            var pdf = new jsPDF('p', 'pt', 'a4');

            pdf.addHTML(document.getElementById("product_sheet"), function() {

                ps_filename = "generated-product-sheet";
                var file = btoa(pdf.output());

                var formData = new FormData();
                formData.append('data', file);

                $.ajax({
                  url: jspod.ajax_url+'?action=so56917978_upload',
                  data: formData,
                  processData: false,
                  contentType: false,
                  type: 'POST',
                  success: function(data){
                      alert(data);
                  }
              });
            });
        }

将PDF保存到服务器的PHP:

add_action( 'wp_ajax_so56917978_upload', 'so56917978_upload_callback' );
add_action( 'wp_ajax_nopriv_so56917978_upload', 'so56917978_upload_callback' );
function so56917978_upload_callback() {
    if ( ! empty( $_POST['data'] ) ) {
        $data = base64_decode($_POST['data']);
        file_put_contents( get_stylesheet_directory_uri() . '/POD/pod.pdf' , $data );
        echo "success";
    } else{
        echo "No Data Sent";
    }
    echo 'got there';
    die();
}

如前所述,我收到成功消息,但似乎什么也没有保存。

当我检查“网络”标签时,我看到:Network tab

字母字符串看起来像base64字符串,并且看起来很长。比图片中显示的要长得多。

我想知道PHP是否不足以对其进行解码然后保存?

1 个答案:

答案 0 :(得分:1)

您正在使用get_stylesheet_directory_uri()来返回目录URL,

使用get_stylesheet_directory()获取样式表目录的实际路径。

尝试将功能更改为此,并检查ajax请求的响应

function so56917978_upload_callback() {
    $res = [
        'saved' => 0,
    ];

    if ( ! empty( $_POST['data'] ) ) {
        $pdf = get_stylesheet_directory() . '/POD/pod.pdf';
        $data = base64_decode($_POST['data']);
        file_put_contents( $pdf, $data );
        $res['pdf'] = $pdf;
        $res['saved'] = 1;
    } else{
        $res['error'] = 'No Data Sent'; 
    }
    wp_send_json( $res );
}