Ich habe unterschiedliche Logik in einer Aktion hängt davon ab, ob die Anfrage ein AJAX ist oder nicht.
(Für AJAX-Logins muss ich nach erfolgreicher Anmeldung nicht umleiten, was beispielsweise bei der normalen Anmeldung nicht der Fall ist).
Was ist der beste Weg, neben der Überprüfung der Header für X-Requested-With: XMLHttpRequest
Gibt es eine Flagge oder etwas?Was ist der beste Weg, in einem Controller zu wissen, ob die Anfrage eine XMLHTTP ist oder nicht (ZF)
Antwort
This method Werke für eine Header-Kontrolle, die von nahezu eingestellt ist (wenn nicht) alle großen Bibliotheken JS, wie jQuery und YUI.
$this->getRequest()->isXmlHttpRequest() //returns true if is XHR
Verfahren detailliert durch smack0007 ist garantiert genau zu sein, aber die oben beschriebene Methode ist in Ordnung, wenn die Verbindung immer durch eine Bibliothek hergestellt, die den Header setzt. Es ist wahrscheinlich nicht für eine öffentliche API geeignet.
Normalerweise erstelle ich zwei Einstiegspunkte für meine App: /index.php und /ajax/index.php. Beide haben einen gemeinsamen Bootstrapper, aber in der ajax.php habe ich einen FrontController-Parameter gesetzt, um zu sagen, dass diese Anfrage eine Ajax-Anfrage ist.
Ich kann dann nur mit dem Request-Objekt einchecken.
if($this->getRequest()->getParam('ajax')) {
// Ajax request
} else {
// Normal request
}
Die Klasse Zend_Controller_Request_Http hat eine Methode namens isXmlHttpRequest(), die Ihnen sagen soll, ob die Anfrage von Javascript (ajax) stammt oder nicht.
(aus der Praxis Codierung aber) Wahrscheinlich so etwas wie dies in Ihrer Aktion wäre:
if($this->getRequest()->isXmlHttpRequest()){
//is ajax
}
else{
//regular request
}
Es gibt keine zuverlässige Methode, um sie auseinander zu halten; Browser verwenden fast denselben HTTP-Code für XMLHttpRequest und normalen Zugriff.
Mit der verschiedenen Browser-Handhabung von benutzerdefinierten Headern und potenziellen Proxy-Interferenz, würde ich nicht vertrauen, dass die X-Requested-With-Header in allen Fällen durchkommen. (Und das ist alles, was isXmlHttpRequest eigentlich sucht.)
Stattdessen würde ich einen Parameter (? Ajax = 1) oder eine andere Methode verwenden, die eine eindeutige URL wie den Vorschlag von Smack generiert.
- 1. Was ist der Weg zu wissen, ob die Ansicht für GET oder POST in Javascript ist?
- 2. Was ist der beste Weg, "Controller" -Klassen zu laden/auszuwählen
- 3. Was ist der beste Weg
- 4. Was ist der beste Weg zu
- 5. Was ist der beste Weg ist, eine Datumzeit oder Datum in einem URLconf in Django
- 6. Was ist der beste Weg, um eine IllegalArgumentException zu fangen
- 7. Was ist der beste Weg, eine Mercurial-Filiale zu schließen?
- 8. Was ist der beste Weg zu bestimmen, ob eine System.DateTime Mitternacht ist?
- 9. Was ist der beste Weg, um eine Sitemap zu erstellen?
- 10. Was ist der beste Weg, eine Prozedur "verzögert" zu nennen?
- 11. ZF: HTTP-Anfrage von einem Controller zu einem anderen hängt
- 12. Was ist der beste Weg, um eine Animation zu fahren?
- 13. Überprüfen, ob die aktuelle Anfrage-URL der Controller-Index ist
- 14. Was ist der beste Weg zu bestimmen, ob eine Variable ein bestimmtes Objekt ist?
- 15. Was ist der beste Weg, LaTeX in eine Webseite einzubetten?
- 16. Was ist der beste Weg, um eine Eigenschaft zu deklarieren?
- 17. Was ist der beste Weg, eine Schleifeninvariante zu bestimmen?
- 18. Was ist der beste Weg, um eine Liste zu kopieren?
- 19. Was ist der beste Weg, um eine Enumeration zu erhöhen?
- 20. Was ist der beste Weg, eine Sprache neu zu lernen?
- 21. Was ist der beste Weg, EventDispatcher in EntityRepository zu injizieren?
- 22. Was ist der beste Weg, HTML in Excel zu konvertieren
- 23. Was ist der beste Weg, Namenskonflikte in Javascript zu lösen?
- 24. Was ist der beste Weg, um eine Tabelle zu deduplizieren?
- 25. In C#, was ist der beste Weg zu testen, ob ein Datensatz leer ist?
- 26. Was ist der schnellste Weg zu überprüfen, ob eine Website in Perl oder C ist?
- 27. Was ist der beste Weg zu überprüfen, ob ein Objekt ein Array ist oder nicht in Javascript?
- 28. Was ist der beste Weg, gruppierte Tabellenansicht-Controller auf dem iPhone zu erstellen?
- 29. Was ist der beste Weg, um vorberechnete Daten zu implementieren?
- 30. Was ist der beste Weg zu überprüfen, ob eine Anwendung in bash läuft?
Ah, kaum geschlagen mich dazu. Plus eine Verbesserung für eine gute Erklärung (plus Vorbehalte) –
Dies * ist * "Überprüfung der Header für X-Requested-Mit: XMLHttpRequest", obwohl. – bobince
Richtig, aber wenn Sie ein Javascript-Framework verwenden, das diese Header zuverlässig setzt (und nur diese JS-Bibliothek für Ajax-Aufrufe), dann sollten Sie sich auf die Methode verlassen können. Die Zend-Dokumentation spezifiziert zum Beispiel diese Methode "Sollte mit Prototype/Script.aculo.us arbeiten, möglicherweise anderen." Ein paar Tests mit Ihrem Framework der Wahl sollten ausreichen. Wenn jedoch ein benutzerdefiniertes JS/Ajax verwendet wird, stimme ich zu, dass bei dieser Methode möglicherweise Probleme auftreten. –