Не срабатывает registerjs в ajax?

Возможно, причиной того, что метод registerJs не работает внутри AJAX в Yii, может быть проблема с тем, что скрипт, созданный этим методом, не вставляется на страницу.

Когда вы вызываете метод registerJs внутри AJAX-запроса, скрипт должен быть вставлен в разметку страницы после выполнения AJAX-запроса. Однако, по умолчанию, Yii не вставляет скрипты, добавленные с использованием registerJs в AJAX-ответ. Вместо этого, они будут просто возвращены в формате текста.

Чтобы решить эту проблему, вам необходимо явно указать Yii, чтобы он вставил скрипты во время выполнения AJAX-запроса. Для этого вы можете использовать опцию processOutput в объекте yiiwebView. Например:

use yiiwebView;

...

// Создаем экземпляр вида
$view = new View();

// Включаем обработку вывода скриптов
$view->processOutput = true;

// Регистрируем скрипт
$view->registerJs('alert("Hello, AJAX!");');

// Возвращаем ответ AJAX-запроса
$response = [
    'success' => true,
    'html' => $view->renderAjax('_ajax_partial_view'),
];

return json_encode($response);

В этом примере мы создаем экземпляр класса yiiwebView и устанавливаем свойство processOutput в значение true. Затем мы регистрируем скрипт с помощью registerJs и возвращаем результат AJAX-запроса, включая HTML-разметку частичного представления _ajax_partial_view, которая будет отображаться на странице вместе со скриптами.

Теперь, результат AJAX-запроса будет содержать как HTML-разметку, так и вставленные скрипты, которые будут выполняться после выполнения AJAX-запроса.

Однако, будьте осторожны с этим подходом, так как вставка скриптов в AJAX-ответ может создавать потенциальные проблемы безопасности, если вставленные скрипты являются динамическими или контролируемыми пользователем и могут быть подвержены атакам, таким как внедрение кода или межсайтовый скриптинг (XSS). Поэтому будьте уверены, что тщательно проверяете и обрабатываете входные данные, прежде чем вставлять их в скрипты.