2010-01-06 23 views
5

que tienen un marco MVC auto-laminado que estoy construyendo, y hasta este momento han logrado evitar la necesidad de cualquier llamadas AJAX. Ahora, sin embargo, me gustaría crear un feed de actualización en tiempo real.llamadas MVC ajax - ¿dónde manejarlas?

Mi pregunta es, ¿dónde están los controladores para la llamadas Ajax por lo general almacenan en un MVC? ¿Debo almacenarlos en el mismo controlador que está involucrado en hacer la llamada?

Por ejemplo, si mi dominio www.example.com/browse/blogs (browse es el controlador, blogs es el método) está haciendo una llamada AJAX para una lista actualizada de blogs, la llamada sería simplemente a www. example.com/browse/update_list o algo así?

O, de modo que sea a un controlador de AJAX de sólo separada? www.example.com/ajax/update_blogs~~V~~3rd

¿Cómo lo haces?

Respuesta

2

yo diría que una petición Ajax es exactamente lo mismo que un no-Ajax uno: funciona exactamente de la misma manera, en realidad, desde el punto de vista del protocolo HTTP.

La única diferencia es que va a devolver algunos datos no formateados, como JSON o XML (bueno, esto es lo mismo que la generación de un canal de información ATOM ^^), o sólo una parte de una página HTML.

Entonces, los trataría como cualquier otra solicitud HTTP "normal", y los colocaría como lo haría para las solicitudes que no son de Ajax.


Una idea semi-alternativo podría ser la de tener sólo una acción en su controlller: /browse/blogs - y siempre que uno llame.

embargo, sería detectar si está siendo a través de una petición Ajax o no, y lo haría:

  • vuelta una página completa si llama a través de una solicitud "normal"
  • o devolver sólo algunos datos (o una parte de la página) si se llama a través de una solicitud de Ajax

Nota: esa no es una idea "salvaje"; Zend Framework, por ejemplo, proporciona algunas cosas para facilitar eso (ver 12.8.4.3. ContextSwitch and AjaxContext)

0

Aunque no estés utilizando asp.net MVC, te recomiendo que consultes el tutorial de la cena de nerds, específicamente la sección de AJAX. le ayudará a responder algunas de sus preguntas de diseño.

Ellos tienen una acción separada en el mismo controlador.

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

8

La mejor práctica sería ignorar el hecho de que se trata de una solicitud AJAX por completo y preocuparse solo por el controlador al que pertenece su solicitud AJAX. Si tuviera un controlador AJAX para todos, probablemente estaría agrupando manzanas en peras, por así decirlo.

La principal diferencia es que para las solicitudes AJAX es probable que deba evitar establecer cualquier tipo de diseño (y más que probable ver). Esto puede remediarse fácilmente teniendo un método en la clase de Controlador principal que verifica las solicitudes válidas de AJAX:

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

¡eso es genial!No sabía que podía comprobarlo de esta manera :) Siempre utilicé "? Call_type = ajax" :) ¡Gracias, me alegraste el día!))) – oyatek