JavaScript не загружен на AJAX вызов на странице корзины WooCommerce - PullRequest
0 голосов
/ 02 марта 2020

Я использую woocommerce_after_shipping_rate хук, чтобы добавить свои коды, некоторые PHP, некоторые JS. При нормальной загрузке страницы все мои коды загружаются отлично. Но когда я добавляю / удаляю товары из корзины или обновляю свой адрес в калькуляторе доставки, что привело к обновлению доступных методов доставки (с использованием AJAX), мои коды JS не загружаются.

Возможно это просто очень скучная вещь, которую я пропустил. Вот простая версия моего кода:

function abc( $method, $index ) {

    echo "This loaded on AJAX just fine";

    echo "<script type='text/javascript'>";
    echo "var a = 'This is NOT loaded on AJAX call, along with the tags above and below this';";
    echo "</script>";

    echo "This also loaded on AJAX just fine";

}
add_action( 'woocommerce_after_shipping_rate', 'abc', 10, 2 );

В случае, если кому-то интересно, мой код JS должен поместить некоторые переменные, которые нужны моей функции JS в заголовок страницы. Переменные основаны на доступном способе доставки, который загружен в настоящее время.

Я надеюсь, что можно добиться, чтобы мой код JS также был загружен на AJAX.

Любая помощь приветствуется. , Спасибо.

1 Ответ

0 голосов
/ 03 марта 2020

Вероятно, это скорее "хак" вместо ответа.

В основном проблема заключалась в том, что с помощью тега <script> не было загружено в DOM (но фактически отправлено в браузер с сервера). Поэтому я изменяю <script> на <div style='display:none;'> и сохраняю содержимое как есть (все еще заполненное JS).

function abc( $method, $index ) {

    echo "This loaded on AJAX just fine";

    echo "<div class='response-div' style='display:none;'>";
    echo "var a = 'This is where you echo all your JS';";
    echo "</div>";

    echo "This also loaded on AJAX just fine";

}
add_action( 'woocommerce_after_shipping_rate', 'abc', 10, 2 );

А затем на window.load и document.ajaxComplete, я копирую внутренний HTML из <div> и создайте новый элемент <script> в REPLACE <div>, содержащий тот же внутренний HTML.

Этот ответ { ссылка } имеет функцию замены, но для всей страницы. Я просто должен был изменить это, чтобы приспособиться к моим потребностям.

Как глупо, как этот звук, он работает. Имейте в виду, моя цель - написать только глобальные переменные JS, а не выполнять функцию JS. Поэтому я не знаю, сработает ли этот метод, если вы захотите это сделать.

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