2010-01-06 8 views
5

J'ai un framework MVC que je suis en train de construire, et jusqu'à présent j'ai réussi à éviter les appels AJAX. Maintenant, cependant, j'aimerais créer un flux de mise à jour en temps réel.Appels ajax MVC - où les gérer?

Ma question est, où sont les gestionnaires pour les appels ajax généralement stockés dans un MVC? Devrais-je les stocker dans le même contrôleur que celui qui participe à l'appel? Par exemple, si mon domaine www.example.com/browse/blogs (parcourir est le contrôleur, blogs est la méthode) fait un appel AJAX pour une liste mise à jour des blogs, l'appel serait simplement à www. example.com/browse/update_list ou quelque chose? OU, donc, à un contrôleur séparé AJAX seulement? www.example.com/ajax/update_blogs

Comment le faites-vous?

Répondre

2

Je dirais une requête Ajax est exactement le même que celui d'un non-Ajax un: il fonctionne exactement de la même façon, en fait, d'un point de vue du protocole HTTP. La seule différence est que vous renvoyez des données non formées, comme JSON ou XML (hé, c'est la même chose que de générer un flux ATOM ^^), ou seulement une partie d'une page HTML. Donc, je traiterais ceux-ci comme n'importe quelle autre requête HTTP "normale", et les placerais comme je le ferais pour les demandes non-Ajax.


Une idée semi-alternative pourrait être d'avoir une seule action dans votre contrôleur: /browse/blogs - et appelez toujours celui-là.

Mais, il détecterait si elle est d'être via une requête Ajax ou non, et serait:

  • retour une page complète si elle est appelée via une requête « normale »
  • ou retour seulement quelques données (ou une partie de la page) si elle est appelée via une requête Ajax

Remarque: ce n'est pas une idée «sauvage»; Zend Framework, par exemple, fournit quelques trucs pour faciliter cela (voir 12.8.4.3. ContextSwitch and AjaxContext)

0

Même si vous n'utilisez pas asp.net MVC, je vous recommande de regarder à travers le didacticiel de dîner nerd, en particulier la section AJAX. cela aidera à répondre à certaines de vos questions de conception.

Ils ont une action distincte sur le même automate.

http://www.wrox.com/WileyCDA/Section/id-321793.html

8

La meilleure pratique serait de ne pas tenir compte du fait qu'il s'agit d'une requête AJAX entièrement et de ne vous soucier que du contrôleur auquel votre requête AJAX est pertinente. Si vous aviez un contrôleur AJAX fourre-tout, vous grouperiez probablement des pommes aux poires, pour ainsi dire.

La principale différence est que pour les requêtes AJAX, vous devrez probablement éviter de configurer des données de mise en page (et plus que probable). Cela peut facilement être résolu en ayant une méthode dans votre classe de contrôleur parent qui vérifie les demandes AJAX valides:

protected function isAjax() 
{ 
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
      $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'); 
} 
+1

c'est génial!Je ne savais pas que je pouvais le vérifier de cette façon :) J'ai toujours utilisé "? Call_type = ajax" :) merci, vous avez fait ma journée!))) – oyatek

Questions connexes