When a request was made to the web server, the controller decided what page the user should be directed too, what data to pull from the data server, how to build the model, and how to build the view. Once the view was created, HTML would then be generated and sent back to the client machine as a response. This was the fatal flaw of web applications in the past. Unlike desktop applications, if users needed to interact with the interface, the application would have to reload the entire page, because all of the components of the MVC architecture were stuck on the web server.
This is why AJAX was born in 1995. Ajax allowed users to somewhat interact with a web application’s interface much better than before, because individual requests could be made to the web server, which would then in turn respond with new data to update parts of the webpage without reloading the whole page. AJAX still wasn’t a perfect solution however, because every user interaction still had to make separate requests to the web server.
Once the web world began to embrace AJAX, a new movement began to unfold called RIAs. With this model, the user could have a rich application experience without making requests to the web server with each action because the view component of the MVC architecture resides in the client (see the figure below)
Here’s an example. Let’s say that you are using a web application that displays data. You enter some inputs, press “Enter”, and the web application sends a request to the web server. The controller then gets the appropriate data from the data server, creates a model of that data, and sends it back to the client via JSON. The client receives the JSON and replicates the model as native objects. If the user wants to see this data as a pie chart, the native model can be used to generate a pie chart (which is a view) without making a request to the server. Likewise, if the user wants to see the data as a bar graph, the native model can be used to generate a bar graph, again without making a request to the server. All of this is done without reloading the page, and only one request was made to the web server.