Sicher geht es auch per include(), das ist der herkömmliche Weg mit Apache/PHP. Die alternative Route würde über NodeJS als Server und ein MV* Framework wie Angular oder Backbone führen.
Der spezifische Unterschied zwischen PHP und JavaScript besteht darin, dass im ersten Fall der die Kommunikation zwischen Client und Server unidirektional verläuft. Das heißt, der User submitted zumeist irgendwelche Formulardaten, auf die der Server ein Datenbank-Query ausführt und das gewünschte Ergebnis mit einem Seitenreload zurückliefert. Ajax bietet zwar die Möglichkeit, den kompletten Reload zu umgehen, ändert aber nichts daran, dass der Server nie von selber tätig wird, sondern stets auf den Request des Clients wartet.
Mit JavaScript lässt sich eine Realtime Kommunikation aufbauen, bei welcher der Server auf jede Änderung reagiert, ohne dass der User dazu einen Button drücken müsste.
Der simpelste Weg eines bidirektionalen Bindings zwischen Daten (Model) und und deren Ausgabe (View) wäre folgender Code:
HTML:
<div ng-app>
<input type="text" ng-model="data.text">
<h1>{{data.text}}</h1>
</div>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.min.js"></script>
Bei jeder Eingabe innerhalb des Input-Feldes wird ein Event gefired, welches den Feldinhalt zum Model schickt, und das Model sendet diesen sofort an den View zurück, wo er in der <h1> interpoliert wird. Model und View überwachen sich hier gegenseitig, und in Verbindung mit NodeJS und einer Datenbank lässt sich daraus eine Realtime Verbindung stricken.