У меня есть команда 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)