Question

Quelle est la différence entre l'utilisation:

 $.ajax({
  type: 'POST',
  url: Drupal.settings.basePath + 'module/get/' + node,
  dataType: 'json',
  data: { 'ajax' : true }
 });

par rapport à:

 $.ajax({
  type: 'POST',
  url: Drupal.settings.basePath + 'module/get',
  dataType: 'json',
  data: { 'ajax' : true, 'node' : node }
 });

Dans le premier cas, vous devez accéder à la variable de nœud en tant que paramètre dans la fonction de rappel et dans le second cas, vous souhaitez y accéder avec $ _POST [ « noeud »] à droite? Ne serait-pas la deuxième méthode toujours mieux, mais je vois beaucoup de gens le faire la première manière. Pour ne pas dire que la seconde est que ce soit sûr. Toujours à la recherche en jetons de forme, mais en essayant de comprendre d'abord ce bit de base.

demande aussi pour le cas 1, en supposant cette ajax est déclenchée par un bouton, comment voulez-vous arrêter une personne d'entrer directement dans l'URL, monsite / module / get / 20 et l'activer? Ne vérifier simplement que $ _POST [ 'ajax'] == true faire? Ou est-il encore un trou de sécurité là-bas?

Était-ce utile?

La solution

Pas de différence réelle à première vue:

En supposant que votre variable « noeud » est juste un identifiant de nœud, il n'y a pas beaucoup de différence entre les deux. , Les deux semblent sémantiquement pour effectuer une opération « get » (même si elles sont des demandes techniquement post), car ils ont juste de récupérer des données sans changer l'état sur le serveur (ok, c'est une autre hypothèse).

sage de sécurité, il n'y a pas de différence pertinente soit - les deux peuvent être « forgé » facilement et la différence se résume à la même que l'EEG « standard » vs débat POST, c'est pas de différence, sauf que les premiers expose les paramètres d'un petit peu plus « accessible » à l'observateur occasionnel, car ils sont bien en vue dans l'URL.

Mais une différence de 'commodité' dans Drupal:

Dans Drupal, la première version est souvent rencontrée car il peut utiliser les Wildcard Loader Arguments fonctionnalité (introduite dans Drupal 6). Disons que votre URL de rappel est définie dans hook_menu comme ceci:

$items['module/get/%node'] = array(
'title' => 'Foo',
'type' => MENU_CALLBACK,
'page callback' => 'yourModule_callback',
'page arguments' => array(2),
);

Avec cela, yourModule_callback() sera appelée avec son premier paramètre étant déjà le noeud complètement chargé obect pour le passé dans JNV, comme %node dit Drupal pour exécuter un node_load() sur le paramètre avant de le remettre à la fonction de rappel. En utilisant la deuxième version de votre exemple, la fonction de rappel devrait charger l'objet de nœud lui-même, après son extraction à partir des données POST.

Alors une chose pratique ici.

En outre, un modèle commun au sein de Drupal est d'utiliser la même URL de rappel pour une requête AJAX comme pour son non javascript alternatif « de secours ». Alors, quand yourModule_callback() est appelé, il peut faire ce qu'il vise à faire le premier passé dans le nœud, l'assemblage essentiellement son résultat. Après cela est fait, il vérifie seulement pour $ajax == TRUE dans les données POST. Si elle est là, elle sait que le résultat est destiné à une requête AJAX, il pourrait le rendement comme résultat JSON. Si ce n'est pas là, il sait qu'un cycle de pleine page est en cours, et peut ajuster sa sortie en conséquence (par exemple la reconstruction d'une forme, la régénération d'une page entière, quoi que ...).

De cette façon, vous n'avez pas d'enregistrer des URL distinctes pour vos callbacks non AJAX / AJAX.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top