I used Java to accomplish the same thing as AJAX, back in 1996-97 or so. I embedded a hidden (1-pixel, transparent) applet that opened a TCP socket to a server.
The major browsers all allowed applets to expose methods to JavaScript, so I provided a simple API that the page used to send requests and receive responses, which the applet multiplexed on the same connection.
I also used it to receive notifications from the server; the system I built was a teleconferencing system, and so while a call was going on, the server continually sent status messages about parties entering or exiting the call, and flags about which party was speaking (based on audio monitoring). Requests were used for commands like disconnecting or muting.
It was pretty solid once we figured out how to make applet instantiation resilient (the browser/applet interface wasn't very stable). In fact, it was better than XMLHttpRequest, because it was just one, compact, long-running TCP stream; it was pretty much a websocket, before there were websockets.