2012-02-29 117 views
0

我正在构建一个复杂的基于AJAX的解决方案作为模块放入Drupal 7站点。我决定不写一个独立的PHP脚本来响应我的jQUERY ajax调用,但在我的drupal模块中实现代码。Drupal 7函数ajax响应者

我的问题是建立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的原因是因为我试图创建的菜单(上面的第一个)没有创建。刷新高速缓存不合理的次数后,终于创建了...所以我'强迫它'通过从我的代码清除缓存。此外,这是在Drupal中提供AJAX回调的最佳方式吗? – sisko 2012-02-29 16:07:48

+0

@sisko你的意思是使用'delivery callback'方法吗?如果是这样,那么是的,我认为这是做到这一点的最佳方式......核心AJAX函数似乎是这样做的:) – Clive 2012-02-29 16:36:06

1

您仍在创建一个循环,您的菜单项正在被调用,然后被缓存清除。如果有什么应该首先调用它,但是如果在模块的hook_menu()中需要这个,则会出现另一个问题。

您应该删除它,并确保您的表单正在调用并使用固定数据返回数据。