2012-02-29 4 views
0

Я создаю комплексное решение на основе AJAX в качестве модуля на сайте Drupal 7. Я решил не писать автономный PHP-скрипт для ответа на мой jQuery-вызов ajax, а реализовать код в моем модуле drupal.Drupal 7 function ajax responder

Моя проблема заключается в установлении связи между jquery и DRUPAL i: e функцией, которая отвечает на мое CLICK EVENT.

Я использую следующий код:

function staff_filter_menu(){ 
    $items = array(); 
    $items['staff/filtering/results/%'] = array(
     'page callback' => 'staff_filter_function', 
     'access callback' => TRUE, 
     'type' => MENU_CALLBACK, 
     'delivery callback' => 'staff_filter_deliver', 
    ); 
    $items['staff/filtering/saveclipboard'] = array(
     'page callback' => 'staff_filter_savetoDB', 
     'access callback' => TRUE, 
     'type' => MENU_CALLBACK, 
     'delivery callback' => 'staff_filter_deliver', 
    ); 
    drupal_flush_all_caches(); 
    return $items; 
} 

Но, он перестал работать, когда я остановился, неустановленного и перезапустить модуль. Кажется, это не надежная стратегия.

ответ

1

drupal_flush_all_caches() делает это:

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

Когда меню перестроен, hook_menu() называется ... в основном вы вызывает бесконечный цикл, поставив drupal_flush_all_caches(), где вы в настоящее время есть.

+0

Я вижу вашу точку Clive, но причина, по которой я вызываю drupal_flush_all_caches, заключается в том, что меню, которое я пытался создать (первое выше), не было создано. После очистки кеша необоснованное количество раз, оно, наконец, было создано ... поэтому я «заставил его», очистив кеш от моего кода. ТАКЖЕ, это лучший способ обеспечить обратный вызов AJAX в Drupal? – sisko

+0

@sisko Вы имеете в виду использование метода обратного вызова доставки? Если да, то да, я думаю, что это лучший способ сделать это ... основные функции AJAX, похоже, делают это так: – Clive

1

Вы все еще создаете цикл, в котором вызывается пункты меню, а затем очищается кешем. Если что-то нужно вызвать сначала, хотя есть и другая проблема, если вы требуете этого в hook_menu() вашего модуля.

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

Смежные вопросы