In the early days of the web, all web sites made one request to the server, and the server responded with the entire web page to be displayed. Query parameters, cookies, and request headers were just about all a web developer had in his or her toolkit with which interactivity could be accomplished. Web servers did all the grunt work rendering dynamic web pages.
This all changed when Microsoft released IE5 with
which was a means to send a request to the server and receive the response.
This was a game changer.
At first, this was used to simply swap the contents of one
<div> on the page verbatim with the returned response.
Responses were originally HTML fragments to be used as such.
Douglas Crockford specified the JSON format,
which gained rapid following.
Most AJAX nowadays uses JSON instead of XML,
so we should really be calling in AJAJ - but the original name stuck.
This disrupted the status quo of one page load per request, and created an explosion in the amount of interactivity possible on a page.
Building complex user interfaces and interfacing with a server is indeed an onerous task. It thus increasingly became important to use a framework when developing web applications. Take a look at the source code of BackboneJs, AngularJs, or EmberJs, to get a feel for how much work would be involved in rolling your own.
There were several frameworks to come out before it did,
but BackboneJs was the first to really nail it.
allowed front end developers to create a single-page application -
(most of) the visible page in the client,
and none of the requests navigated you away from
(thus the "single page" in "single page application").
This combination of AJAX and the MVC pattern is the cornerstone of single-page application frameworks. BackboneJs was merely the first of many SPA frameworks to gain widespread popularity. There a currently are plethora of different frameworks looking to take its place. AngularJs and EmberJs are two of them.