Покрытие команды Ajax для использования в Wordpress - PullRequest
0 голосов
/ 07 июля 2019

У меня есть команда Ajax, которая работает на большинстве платформ, но я не могу заставить ее работать на WordPress из-за моего непонимания admin-ajax.php

Я пытаюсь получить форму для преобразования в PDf и затем загрузить ее на сервер, это должно быть в состоянии сделать с помощью jQuery, Ajax и PHP, однако моя команда Ajax не работает.

мой jQuery для проверки, а затем преобразования в PDF

jQuery(function($){

var $form =  $("form[name='pdf-download']"),
  $successMsg = $(".alert");
  $.validator.addMethod("letters", function(value, element) {
    return this.optional(element) || value == value.match(/^[a-zA-Z\s]*$/);
  });
  $form.validate({
    rules: {
      firstname: {
        required: true,
        minlength: 3,
        letters: true
      },
      email_id: {
        required: true,
        email: true
      }
    },
    messagess: {
      firstname: "Please specify your name (only letters and spaces are allowed)",
      email_id: "Please specify a valid email address"
    },
    submitHandler: function() {
      $ = jQuery;

      $( "#submit" ).click(function() {
          alert("Submitted");
      make_product_sheet();
  });


  function make_product_sheet() {

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

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

        ps_filename = "generated-product-sheet";
        var pdf = btoa(doc.output()); 
            $.ajax({
            method: "POST",
            url: "website.com/wp-content/themes/theme/uploads.php",
            data: {data: pdf},
            }).done(function(data){
            console.log(data);
            });
      });
  }
    }
  });

});

upload.php

<?php 
if(!empty($_POST['data'])){
$data = base64_decode($_POST['data']);
file_put_contents( "http://website.com/wp- 
content/themes/theme/POD/test.pdf", $data );
echo "success";
} else {
echo "No Data Sent";
}
exit();
?>

Я был бы очень признателен за то, что кто-то мог бы помочь мне преобразовать это в функцию, которая работает на WordPress через admin-ajax.php, так как я изо всех сил пытаюсь найти какую-либо ясную помощь онлайн

Обновление ...

Благодаря приведенному ниже ответу у меня теперь есть:

function sendToServer() {
    let pdf = new jsPDF('p', 'pt', 'a4');
    pdf.html(document.body, {
        callback: function (pdf) {
            let obj = {};
            obj.pdfContent = pdf.output('datauristring');
            var jsonData = JSON.stringify(obj);
            $.ajax({
                url: "admin_url('admin-ajax.php')",
                type: 'POST',
                contentType: 'application/json',
                data: {
                  action: 'so56917978_upload', // Action name.
                  data: pdf,
              },
            });
        }
    });
}

и в functions.php:

function so56917978_upload_callback() {
if ( ! empty( $_POST['data'] ) ) {
    $data = base64_decode($_POST['data']);
    file_put_contents( " /POD/ ", $data );
    echo "success";
} else {
    echo "No Data Sent";
}

die;
}
add_action( 'wp_ajax_so56917978_upload', 'so56917978_upload_callback' );
add_action( 'wp_ajax_nopriv_so56917978_upload', 'so56917978_upload_callback' );

также пробовал:

file_put_contents( "get_stylesheet_directory_uri() . '/POD/pod.pdf' ", $data );

когда я запускаю консоль при отправке данных, я получаю ...

Uncaught (в обещании) TypeError: Невозможно прочитать свойство 'length' с неопределенным значением

at to8bitStream (jspdf.debug.js: 1565)

в API. private .pdfEscape.API.pdfEscape (jspdf.debug.js: 1612)

at e (jquery-2.2.4.min.js: 4)

в Гб (jquery-2.2.4.min.js: 4)

в Гб (jquery-2.2.4.min.js: 4)

в Гб (jquery-2.2.4.min.js: 4)

в Function.n.param (jquery-2.2.4.min.js: 4)

в Function.ajax (jquery-2.2.4.min.js: 4)

в Object.callback (POD.js? Ver = 1.1: 40)

at Promise.doCallback_main (jspdf.debug.js: 12370)

html2canvas: начинается предварительная загрузка: поиск фоновых изображений html2canvas.min.js: 7

html2canvas.Util.Children. Ошибка: исключение: невозможно прочитать свойство 'document' из null html2canvas.min.js: 7

html2canvas.Util.Children. Ошибка: исключение: невозможно прочитать свойство 'document' из null html2canvas.min.js: 7

html2canvas: предварительная загрузка: поиск изображений html2canvas.min.js: 7

html2canvas: Предварительная загрузка: Готово. html2canvas.min.js: 7

html2canvas: начало: изображения: 1/5 (ошибка: 0) html2canvas.min.js: 7

html2canvas: начало: изображения: 2/5 (ошибка: 0) html2canvas.min.js: 7

html2canvas: начало: изображения: 3/5 (ошибка: 0) html2canvas.min.js: 7

html2canvas: начало: изображения: 4/5 (ошибка: 0) html2canvas.min.js: 7

html2canvas: начало: изображения: 5/5 (ошибка: 0) html2canvas.min.js: 7

Завершена загрузка изображений: # 5 (ошибка: 0)

1 Ответ

0 голосов
/ 07 июля 2019

Обновите ваш JavaScript до:

function make_product_sheet() {

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

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

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

    $.ajax({
        method: "POST",
        url: "/wp-admin/admin-ajax.php", // Make it dynamic.
        data: {
            action: 'so56917978_upload', // Action name.
            data: pdf,
        },
        }).done(function(data){
            console.log(data);
        });
    });

}

Затем в вашем functions.php или плагине (рекомендуется) положите:

function so56917978_upload_callback() {
    if ( ! empty( $_POST['data'] ) ) {
        $data = base64_decode($_POST['data']);
        file_put_contents( "http://website.com/wp-content/themes/theme/POD/test.pdf", $data );
        echo "success";
    } else {
        echo "No Data Sent";
    }

    die;
}
add_action( 'wp_ajax_so56917978_upload', 'so56917978_upload_callback' );
add_action( 'wp_ajax_nopriv_so56917978_upload', 'so56917978_upload_callback' );

Примечание: Выше указаноне проверено, но я надеюсь, что вам достаточно, чтобы понять.Я рекомендую вам добавить одноразовые номера (действительно, пожалуйста).

Узнайте больше на Кодекс WordPress: AJAX в плагинах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...