Benutzerdefinierte JS-Funktion im AJAX-Rückruf aufrufen?

8

Ist es möglich, eine benutzerdefinierte JS-Funktion in einem AJAX-Rückruf aufzurufen?

function MY_MODULE_ajax_callback() {
  // Define a new array to hold our AJAX commands.
  $ajax_commands = array();

  // Create a new AJAX command that replaces the #page text with our own text.
  $ajax_commands[] = [CUSTOM JS FUNCTION]

  // Return our commandS
  return array('#type' => 'ajax','#commands' => $commands);
}
Alex Gill
quelle
Ja ist es. Oder zumindest sollte es möglich sein. Irgendwelche besonderen Probleme?
Mołot
Dies scheint ein Duplikat von drupal.stackexchange.com/questions/18867/… zu sein
ErichBSchulz

Antworten:

5

Sie können kein beliebiges Skript ausführen, aber wenn Sie Ihre JS-Funktionalität in ein jQuery-Plugin einbinden können ajax_command_invoke, können Sie den gleichen Effekt erzielen, z

$selector = 'body';
$method = 'myJqueryPlugin';
$args = array('arg1', 'arg2');

$ajax_commands[] = ajax_command_invoke($selector, $method, $args);

Wenn das im Frontend herauskommt, wird etwas ausgeführt, das dem entspricht

$('body').myJqueryPlugin('arg1', 'arg2');
Clive
quelle
10

Ja ist es.

Codebeispiel:

$commands = array();
$commands[] = array(
    'command' => 'your_js_callback', // the name of your javascript callback
    'value1'  => 'My first value',
    'value2'  => 'My second value',
);

JS-Code:

(function($, Drupal) {
    Drupal.ajax.prototype.commands.your_js_callback = function(ajax, response, status) {
        alert(response.value1);
        alert(response.value2);
    }
})(jQuery, Drupal);
Muhammad Reda
quelle
3
Dies ist auch ein gutes Beispiel
Rotari Radu