Возврат ответа Ajax, состоящего из HTML и JavaScript, во внешний интерфейс для обработки.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Возврат ответа Ajax, состоящего из HTML и JavaScript, во внешний интерфейс для обработки.

Сообщение Anonymous »

Я несколько дней пытался это понять... я пытаюсь вызвать короткий код через php, обработать его через Ajax и вернуть ответ во внешний интерфейс, но не смог этого сделать.
Похоже, что скрипт просто не запускается, несмотря на то, что do_shortcode правильно выводит правильный ответ. коды, как показано ниже: (Очередь JS выполнена в отдельном php)
PHP

Код: Выделить всё

add_action('wp_ajax_get_amelia_shortcode', 'get_amelia_shortcode');
add_action('wp_ajax_nopriv_get_amelia_shortcode', 'get_amelia_shortcode');

function get_amelia_shortcode()
{
if (defined('DOING_AJAX') && DOING_AJAX)
{
include_once WP_PLUGIN_DIR . '/ameliabooking/ameliabooking.php';
$output = do_shortcode('[ameliaeventscalendarbooking location=2]');
error_log('Shortcode Output: ' . $output);
echo $output;
}
wp_die();
}
JAVA

Код: Выделить всё

jQuery(document).ready(function ($) {
$('#call-amelia-button').on('click', function () {
const $ameliaContent = $('#amelia-content');

$ameliaContent.text('Loading...').addClass('loading');

// Perform AJAX request
$.ajax({
type: 'POST',
url: customAjax.ajaxurl, // Defined via wp_localize_script
data: { action: 'get_amelia_shortcode' },
success: function (response) {
// Extract the script content and HTML content
const $responseHTML = $('').html(response); // Wrap response in a jQuery object

// Insert the non-script parts of the response into the target
const $ameliaContent = $('#amelia-content');
$ameliaContent.html($responseHTML.find('*').not('script').clone()).removeClass('loading');

// Execute scripts in the response
$responseHTML.find('script').each(function () {
const scriptContent = this.text || this.textContent || this.innerHTML;
try {
console.log("Response Content:", response);
$.globalEval(scriptContent);
} catch (error) {
console.error("Error executing script:", error);
}
});
},
error: function (xhr, status, error) {
// Handle errors gracefully
$ameliaContent.text('An error occurred. Please try again later.').removeClass('loading');
}
});
});
});
будем очень благодарны за любую помощь.
большое спасибо!
Цель состоит в том, чтобы запустить плагин бронирования Amelia с помощью do_shortcode() и обновляйте интерфейс в реальном времени. Вышеупомянутое является простым выполнением, позволяющим убедиться, что код работает, прежде чем реализовывать более сложную логику и критерии для запуска плагина с другими параметрами.

Подробнее здесь: https://stackoverflow.com/questions/792 ... e-front-en
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»