Drupalのアヤックス:データのparam対urlで値を渡します
-
23-09-2019 - |
質問
は使用しての違いは何ですかます:
$.ajax({
type: 'POST',
url: Drupal.settings.basePath + 'module/get/' + node,
dataType: 'json',
data: { 'ajax' : true }
});
対ます:
$.ajax({
type: 'POST',
url: Drupal.settings.basePath + 'module/get',
dataType: 'json',
data: { 'ajax' : true, 'node' : node }
});
最初のケースでは、あなたがコールバック関数で、あなたは$ _POST [「ノード」]の右にそれにアクセスしたい秒の場合のパラメータとしてノード変数にアクセスするだろうか?第二の方法は、常により良いことが、私はそれを最初の方法をやって多くの人々を見ていないだろう。第二の方法は、どちらかそれが安全であると言うことではありません。まだフォームトークンに探しますが、最初のこの基本的なビットを把握しよう。
また、ケース1のために迷っこのアヤックスはボタンによってトリガーされると仮定すると、どのように、URLに直接侵入する人を止める個人用サイト/モジュール/ GET / 20およびそれを活性化していますか?単に$ _POST [「アヤックス」] == trueの場合はそれを行うことを確認していますか?それともまだあるセキュリティホールがありますか?
解決
を一目ではありません本当の違い:の
あなたの「ノード」変数は、単にノードIDであると仮定すると、両者の間に大きな違いはありません。意味的には、両方のは、彼らはちょうど(OK、それは別の仮定です)、サーバー上の任意の状態を変更せずにデータを取得するよう、(彼らは技術的にポストの要求があるにもかかわらず)「取得」操作を実行するように見える。
両方が簡単に「偽造」することができ、その差は、最初に公開している以外には違いありませんPOSTの議論、対GET「標準」と同じに沸く -セキュリティが賢明、該当違いがどちらかありませんカジュアルな観察者にはほんの少しより「アクセス」のパラメータ、彼らはURL内ありふれた風景の中にあるようます。
のDrupal内のしかし、 '利便性' の違い:の
それはワイルドカードローダー引数を利用することができますので、はDrupalの中では、最初のバージョンは、しばしば遭遇した
の機能(Drupalの6で導入)。レッツはhook_menuがとても好きで、あなたのコールバックURLが定義されていると言うます:$items['module/get/%node'] = array(
'title' => 'Foo',
'type' => MENU_CALLBACK,
'page callback' => 'yourModule_callback',
'page arguments' => array(2),
);
yourModule_callback()
は、コールバック関数に渡す、それを超える前に、パラメータに%node
を実行するのDrupalを告げるようこれにより、node_load()
は、その最初のパラメータがすでにNIDに渡されたため、完全にロードされたノードobectことで呼び出されます。あなたの例の第二のバージョンを使用して、コールバック関数は、POSTデータから抽出した後、ノードオブジェクト自体をロードする必要があります。
だからここコンビニエンス事ます。
また、Drupalの内の共通パターンは、その非javascriptの「フォールバック」の代替用としてAJAX要求に対して同じコールバックURLを使用することです。 yourModule_callback()
が呼び出されたときに、基本的にその結果を組み立て、最初のノードに渡されたと関係することを意図しているものは何でも行うことができます。それは、POSTデータ内$ajax == TRUE
ため、それだけチェックが行われた後。それがあれば、それはJSONとして出力結果をかもしれないので、それは、結果がAJAX要求のために意図されていることを知っています。それがない場合、それは完全なページサイクルが上で起こっていることを知って、それに応じて出力を調整することができます(例えば...、フォームを再構築し、ページ全体を再生し、何でも)。
その方法は、あなたがあなたの非AJAX / AJAXコールバックのために別々のURLを登録する必要はありません。