Думаю, что это видимо не лучший способ, но я сделал как мне было проще и быстрее:
<?php
drupal_add_js('misc/ajax.js');
return '<div style="display:one">'
. l(t('Click to load') , 'ping/result/nojs/',
array('attributes' => array('class' => array('use-ajax'), 'id' => 'load_ping_button'))
)
. '</div><div id="target"></div><script>jQuery(document).ready(function() {jQuery("#load_ping_button").click();});</script>';
?>
этот код создаёт на странице ссылку, при нажатии на которую запускается ajax-запрос. на событие document.ready поставлено событие, чтобы автоматически нажимать на ссылку (отправляется запрос). это работает.
на запрос отвечает модуль. вот код ответа (частично разумеется):
<?php
$commands = array();
$commands[] = ajax_command_append("#target", $content);
$commands[] = ajax_command_invoke("#load_ping_button", "trigger", array("click"));
ajax_deliver(array('#type' => 'ajax', '#commands' => $commands));
?>
так вот. содержимое контейнера #target изменяется как надо. а вот метод trigger("click") для #load_ping_button не вызывается.. почему так?
вообще суть моей задачи заключается в следующем: нужно постоянно вызывать один и тот же ajax запрос, пока на сервере выполняется определённое условие.
Комментарии
кажется я сам догадался, что ajax запрос не отправляется повторно, потому что предыдущий ещё не обработан... это плохо.. как же мне решить эту проблему?
в общем нашёл решение. сделал так.. и от ненужного линка с событием на нажатие избавился
(function($) {
$.fn.myJavascriptFunction = function(data) {
ajaxcallnow ();
};
})(jQuery);
function ajaxcallnow () {
var settings = {url : "/ping/result/ajax/"};
var ajax = new Drupal.ajax(false, false, settings);
ajax.eventResponse(ajax, {});
}
</script>
<div id="target"></div>
<script>
jQuery(document).ready(function() { ajaxcallnow(); });
</script>