Not so long ago, “data-rich web application” was an oxymoron.
Today, these applications are everywhere and you need to know how to build them.
Now this relationship has been inverted - client applications pull raw data from the server and render it into the browser when and where it is needed.
Think of the Ajax shopping cart which doesn’t require a refresh on the page when adding an item to your basket.
Initially, j Query became the go-to library for this paradigm.
Its nature was to make Ajax requests then update text on the page and so on.
However, this pattern with j Query revealed that we have implicit model data on the client side.
With the server no longer being the only place that knows about our item count, it was a hint that there was a natural tension and pull of this evolution.
The rise of arbitrary code on the client-side which can talk to the server however it sees fit has meant an increase in client-side complexity.
Good architecture on the client has gone from an afterthought to essential - you can’t just hack together some j Query code and expect it to scale as your application grows.
Most likely, you would end up with a nightmarish tangle of UI callbacks entwined with business logic, destined to be discarded by the poor soul who inherits your code.