J'ai une logique différente dans une action dépend si la requête est une AJAX ou non.
(Pour les connexions AJAX, je n'ai pas besoin de rediriger après une connexion réussie, ce qui n'est pas le cas lors d'une connexion normale, par exemple).
Quel est le meilleur moyen, à côté de vérifier les en-têtes pour X-Requested-With: XMLHttpRequest
Y at-il un drapeau ou quelque chose?Quelle est la meilleure façon, à l'intérieur d'un contrôleur, de savoir si la requête est une XMLHTTP ou non (ZF)
Répondre
This method fonctionne en vérifiant pour un en-tête est fixée par presque (sinon) toutes les grandes bibliothèques JS, y compris jQuery et YUI.
$this->getRequest()->isXmlHttpRequest() //returns true if is XHR
La méthode détaillée par smack0007 est garantie pour être précis, mais la méthode ci-dessus est très bien si la connexion est toujours faite par une bibliothèque qui définit l'en-tête. Il ne convient probablement pas à une API publique.
Habituellement, je crée deux points d'entrée pour mon application: /index.php et /ajax/index.php. Ils partagent tous les deux un bootstrappeur commun mais dans l'ajax.php j'ai mis un paramètre FrontController pour dire que cette requête est une requête ajax.
Je peux alors simplement vérifier avec l'objet de demande.
if($this->getRequest()->getParam('ajax')) {
// Ajax request
} else {
// Normal request
}
La classe Zend_Controller_Request_Http possède une méthode appelée isXmlHttpRequest() qui devrait vous indiquer si la requête provient de Javascript (ajax).
(hors de la pratique de codage, mais) serait probablement quelque chose comme ça dans votre action:
if($this->getRequest()->isXmlHttpRequest()){
//is ajax
}
else{
//regular request
}
Il n'y a pas une méthode fiable pour leur dire à part; Les navigateurs utilisent à peu près le même code HTTP pour XMLHttpRequest et l'accès normal. Avec la gestion différente des en-têtes personnalisés et l'interférence potentielle du proxy par le navigateur, je ne ferais pas confiance à l'en-tête X-Requested-With pour passer à travers dans tous les cas. Au lieu de cela, j'utiliserais un paramètre (? Ajax = 1) ou une autre méthode qui génère une URL unique telle que la suggestion de smack.
- 1. La meilleure façon de savoir si un objet DOM est visible ou non, en utilisant mootools
- 2. Quelle est la meilleure façon de créer une application "entièrement" modulaire basée sur ZF?
- 3. Quelle est la meilleure façon d'implémenter cette requête SQL?
- 4. Quelle est la meilleure façon d'optimiser cette requête MySQL?
- 5. Jointure externe ou requête dynamique, quelle est la meilleure solution?
- 6. Quelle est la meilleure façon de laisser une vue JSF générer une réponse à une requête non-jsf?
- 7. Quelle est la meilleure façon de déterminer si un caractère est une lettre dans VB6?
- 8. Quelle est la meilleure façon de détecter si un IDataReader est vide?
- 9. Quelle est la meilleure façon de savoir si un programme Python a quelque chose à lire à partir de stdin?
- 10. Quelle est la meilleure façon de trouver l'inverse de datetime.isocalendar()?
- 11. Quelle est la meilleure façon de commencer à utiliser Mylyn?
- 12. Quelle est la meilleure façon de détecter si Excel 2003 est installé?
- 13. Quelle est la meilleure: DMG ou PackageMaker
- 14. Quelle est la meilleure façon d'initialiser une application?
- 15. Quelle est la meilleure façon d'obtenir la dernière feuille de calcul non vide dans Excel (VBA)
- 16. Quelle est la meilleure façon d'appliquer une ombre portée?
- 17. Quelle est la meilleure façon de trouver à quelle bibliothèque une fonction peut appartenir?
- 18. Dans ActionScript, quelle est la meilleure façon de vérifier si une propriété de noeud xml existe?
- 19. Quelle est la meilleure façon de déterminer si un System.DateTime est minuit?
- 20. Quelle est la meilleure façon de vérifier si l'option actuellement sélectionnée dans une liste déroulante est la dernière?
- 21. Quelle est la meilleure façon d'échantillonner/profiler une application PyObjC?
- 22. Quelle est la meilleure façon de diviser deux objets TimeSpan?
- 23. Quelle est la meilleure façon de détecter si un objet Javascript donné est un élément DOM?
- 24. Quelle est la meilleure façon de reporter des actions après une requête dans ASP.NET?
- 25. Quelle est la meilleure façon d'implémenter un délai AJAX?
- 26. Quelle est la meilleure façon de structurer un projet?
- 27. Quelle est la meilleure façon d'intégrer de la vidéo dans une application Windows Mobile 6?
- 28. Quelle est la meilleure façon de vider un répertoire?
- 29. Quelle est la meilleure façon de lire GetResponseStream()?
- 30. Quelle est la meilleure façon de différencier Crystal Reports?
Ah, à peine me battre. Plus un upvote pour une bonne explication (plus des mises en garde) –
Ceci * est * "vérifiant les en-têtes pour X-Requested-With: XMLHttpRequest", cependant. – bobince
Vrai, mais si vous utilisez un framework javascript qui définit correctement ces en-têtes (et uniquement cette bibliothèque JS pour les appels ajax), vous devriez pouvoir vous fier à la méthode. La documentation de zend spécifie, par exemple, cette méthode "Devrait fonctionner avec Prototype/Script.aculo.us, éventuellement d'autres." Un peu de test avec votre cadre de choix devrait être suffisant. Si n'importe quel JS/Ajax personnalisé est utilisé, cependant, je suis d'accord que quelqu'un peut rencontrer des problèmes avec cette méthode. –