MVC ajax calls - where to handle them?

ajax, model-view-controller, php

Solution

I'd say an Ajax request is exactly the same as a non-Ajax one : it works exactly the same way, actually, from a point of view of HTTP Protocol.

The only difference is that you are returning some non-formated data, as JSON or XML (hey, this is the same as generating an ATOM feed ^^ ), or only a portion of an HTML page.

So, I would treat those as any other "normal" HTTP request, and place them the way I would for non-Ajax requests.

A semi-alternate idea might be to have only one action in your controlller : `/browse/blogs` -- and always call that one.

But, it would detect if it's being via an Ajax request or not, and would :

- return a full page if called via a "normal" request

- or return only some data (or a portion of the page) if called via an Ajax request

Note : that's not a "wild" idea ; Zend Framework, for instance, provides some stuff to facilitate that (see 12.8.4.3. ContextSwitch and AjaxContext )

Problem

I have a self-rolled MVC framework that I am building, and up to this point have managed to avoid the need for any AJAX calls. Now, however, I'd like to create a real-time updating feed. My question is, where are the handlers for the ajax calls usually stored in an MVC? Should I store them in the same controller that is involved in making the call? For example, if my domain www.example.com/browse/blogs (browse is the controller, blogs is the method) is making an AJAX call for an updated list of blogs, would the call simply be to www.example.com/browse/update_list or something? OR, so it be to a separate AJAX-only controller? www.example.com/ajax/update_blogs How do you do it?

Original source