Повторный вызов ajax запроса

Главные вкладки

Аватар пользователя noneart noneart 6 сентября 2013 в 11:54

Думаю, что это видимо не лучший способ, но я сделал как мне было проще и быстрее:

<?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 запрос, пока на сервере выполняется определённое условие.

Комментарии

Аватар пользователя noneart noneart 6 сентября 2013 в 12:24

кажется я сам догадался, что ajax запрос не отправляется повторно, потому что предыдущий ещё не обработан... это плохо.. как же мне решить эту проблему?

Аватар пользователя noneart noneart 6 сентября 2013 в 14:17

в общем нашёл решение. сделал так.. и от ненужного линка с событием на нажатие избавился

<script>
(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>