2012-02-29 5 views
0

私はモジュールとして複雑なAJAXベースのソリューションをDrupal 7サイトに構築しています。私はjQuery ajax呼び出しに応答するスタンドアロンのPHPスクリプトを作成せず、私のdrupalモジュール内にコードを実装することにしました。Drupal 7関数ajaxレスポンダ

私の問題は、jQUERYとDRUPALの間の接続を確立していることです。私の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

私はあなたのポイントクライブを参照していますが、作成しようとしていたメニュー(上記の最初のもの)が作成されていないため、drupal_flush_all_cachesを呼び出す理由があります。無理な回数のキャッシュをフラッシュした後、最終的に作成されたので、私は自分のコードからキャッシュをクリアすることによって強制しました。また、これはDrupalでAJAXコールバックを提供する最善の方法ですか? – sisko

+0

@sisko 'delivery callback'メソッドの使用を意味しますか?もしそうなら、私はそうするのが最善の方法だと思っています...コアAJAX関数はそれをそうするようです:) – Clive

1

メニュー項目が呼び出されていて、キャッシュによってクリアされているループがまだ作成されています。モジュールのhook_menu()でこれが必要な場合は、別の問題がありますが、最初に呼び出す必要があります。

フォームを削除し、フォームが固定データを使用してデータを呼び出して返していることを確認してください。