Есть ли команда AJAX, которую я могу использовать для отладки переменных PHP без прерывания вызова AJAX?


Я знаю список команд Ajax-фреймворка. Каждый из них делает что-то полезное. Но иногда я хочу, для отладки, включить часть отладочных данных в свой ответ AJAX. Я хочу, чтобы это было ненавязчиво, поэтому var_dump отсутствует. Мне нужно обернуть мои отладочные данные в какую-то команду. С другой стороны, я буду просматривать его с помощью консоли JS, поэтому я не хочу, чтобы он действительно что-то менял на моей странице. И изменить что-то скрытое с помощью CSS невозможно - я не отвечаю за это из CSS здесь. Так что это оставляет меня с командным подходом.

Какую команду я мог бы использовать для этой цели?

Я думал о ajax_command_append с селектором, который никогда не будет найден, но я не хочу вводить какие-либо дополнительные ошибки в мою консоль JavaScript.

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

Author: Mołot, 2014-09-30

1 answers

Насколько я знаю, такой команды Ajax для ведения журнала или "обнуления" не существует. Это не значит, что вы не можете их построить! Я, например, создал несколько пользовательских команд Ajax, а также eval(), чтобы я мог запустить несколько быстрых кодов.

1: Определите действие JS

Вам нужно добавить новый файл JS или объединить его по мере необходимости. Обратите внимание, что это document.ready событие важно (это всего лишь определение, поэтому не нужно быть behavior).

(function($){
    $(function() {
        Drupal.ajax.prototype.commands.js_eval = function(ajax, data, status) {
            eval(data.script);
        };
        Drupal.ajax.prototype.commands.console_log = function(ajax, data, status) {
            console.log(data.var);
        };
    });
})(jQuery);

2: Рендеринг Ajax массив

Предполагая, что вы знаете о массивах ajax_render() и JS для визуализации, пришло время создать свою собственную пользовательскую команду.

function mymodule_ajax_command_js_eval($script) {
  return array(
    'command' => 'js_eval',
    'script' => $script,
    'my_custom' => 'my custom value',
  );
}
function mymodule_ajax_command_console_log(&$var) {
  return array(
    'command' => 'console_log',
    'var' => $var,
  );
}

Приведенная выше функция PHP на самом деле не является крючком и может быть любым именем, которое вы хотите. Для удобства я использую ajax_command в имени функции. В возвращаемом массиве command будет вызван из области Drupal.ajax.prototype.commands. Вы можете передать дополнительные переменные, и они будут в data для доступа JS (data.my_custom, data.script, аналогично.)

3: Теперь звони это!

Теперь, когда у вас есть JS и PHP, пришло время вызвать функцию!

$output = array();
// $output[] = ajax_command_append('#some_random_id_that_you_d_normally_use', $html);
$output[] = mymodule_ajax_command_js_eval("alert('Big Bang Theory S8!)");
$output[] = mymodule_ajax_command_console_log($stuff_you_d_normally_dpm);

print ajax_render($output);
exit;
 2
Author: AyeshK, 2014-09-30 12:41:12