Frage

Was ist der Unterschied zwischen der Verwendung von:

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

Vergleich:

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

Im ersten Fall, dass Sie die Knotenvariable als Parameter in der Callback-Funktion und im zweiten Fall zugreifen würden Sie es mit $ _POST zugreifen würden [ ‚Knoten‘] nicht wahr? Wäre nicht die zweite Methode immer besser sein, aber ich sehe eine Menge Leute es die erste Art und Weise zu tun. Um nicht zu sagen, dass die zweite Möglichkeit ist, dass sicher auch nicht. Noch auf der Suche in Form Token, aber zuerst um herauszufinden, diesen Grundes Bit versuchen.

fragen, auch für den Fall 1, diese Ajax unter der Annahme, durch eine Taste ausgelöst wird, wie verhindere Sie eine Person aus direkt in die URL eingeben, mysite / module / get / 20 und es zu aktivieren? Ist die Überprüfung nur, dass $ _POST [ 'Ajax'] == true das tun? Oder gibt es noch eine Sicherheitslücke da?

War es hilfreich?

Lösung

Kein Unterschied auf den ersten Blick:

Unter der Annahme, dass Ihr ‚Knoten‘ Variable ist nur ein Knoten-ID, gibt es nicht viel Unterschied zwischen den beiden. Semantisch, scheinen sowohl eine ‚get‘ Operation auszuführen (auch wenn sie technisch Post-Anfragen sind), da sie nur Daten abrufen, ohne auf dem Server jede Zustandsänderung (ok, das ist eine andere Annahme).

Sicherheit klug, gibt es keinen relevanten Unterschied entweder - beide können leicht ‚geschmiedet‘ werden und die Differenz kocht auf den gleichen sich wie mit dem ‚Standard‘ GET vs. POST Debatte, das heißt, kein Unterschied, außer dass die ersten Enthüllungen die Parameter ein kleines bisschen mehr ‚zugänglich‘ für den flüchtigen Beobachter, wie sie in plain sight in der URL sind.

Aber ein 'Komfort' Unterschied innerhalb Drupal:

Innerhalb von Drupal, die erste Version wird oft begegnet, weil sie die Verwendung der Wildcard Loader Argumente machen können Funktionalität (in Drupal 6 eingeführt). Lassen Sie uns sagen, dass Ihre Rückruf-URL definiert ist, in hook_menu etwa so:

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

Damit wird yourModule_callback() mit seinem ersten Parameter aufgerufen wird bereits vollständig geladen Knoten Obect für die in nid vergangen zu sein, wie %node Drupal erzählt es eine node_load() auf dem Parameter vor Gabe auszuführen über an die Callback-Funktion. Mit der zweiten Version Ihres Beispiel würde die Callback-Funktion den Knoten Objekt selbst laden müssen, nachdem sie von den POST-Daten zu extrahieren.

So eine Bequemlichkeit Sache hier.

Darüber hinaus wird ein gemeinsames Muster in Drupal ist die gleiche Callback-URL für eine AJAX-Anforderung zu verwenden, wie für seine nicht javascript ‚Rückfall‘ Alternative. Also, wenn yourModule_callback() aufgerufen wird, kann es tun, was es soll, zuerst mit dem übergebenen Knoten tun, im Grunde das Ergebnis der Montage. Danach erfolgt, es prüft nur für $ajax == TRUE innerhalb des Daten POST. Wenn es da ist, weiß es, dass das Ergebnis für eine AJAX-Anforderung bestimmt ist, so könnte es Ausgabe das Ergebnis als JSON. Wenn es nicht da ist, weiß es, dass eine ganze Seite Zyklus vor sich geht, und kann die Ausgabe entsprechend anpassen (zum Beispiel eine Form wieder aufzubauen, eine ganze Seite zu regenerieren, was auch immer ...).

Auf diese Weise, die Sie nicht separaten URLs für Ihre nicht AJAX / AJAX-Rückrufe registrieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top