Mówiąc nieładnie AJAX do Gazu! w zasadzie to do Gazy i coby go coś trafiło. Na dole pojawiło się kolejne okienko. Tym razem jest to galeria zdjęć. Kodu na razie nie daję, bo będzie to dłuższa lekcja związana z użyciem obiektów Javy w JFXS.
Siłą AJAXa są zdalne wywołania w tle. Jego wadą ograniczona możliwość przetwarzania takiego wywołania. Wynika to z faktu, że w JS nie ma możliwości pracowania na strumieniach. W Javie i tym samy w JFXS jest. Nie ma zatem ograniczeń co do przesyłanych treści. Są to po prostu dane. Przykładowy kod z dokumentacji JFXS wraz z poprawką stąd:

Listing 1. Wywołanie HttpRequest w JFXS

def request :HttpRequest  = HttpRequest {

    location: "http://javafx.com";

    onStarted: function() { println("started") }
    onConnecting: function() { println("connecting...") }
    onDoneConnect: function() { println("doneConnect") }
    onReadingHeaders: function() { println("readingHeaders...") }
    onResponseCode: function(code:Integer) { println("responseCode: {code}") }
    onResponseMessage: function(msg:String) { println("responseMessage: {msg}") }

    onResponseHeaders: function(headerNames: String[]) {
        println("there are {headerNames.size()} response headers:");
        for (name in headerNames) {
            println("    {name}: {request.getResponseHeaderValue(name)}");
        }
    }

    onToRead: function(bytes: Integer) { println("bytes to read: {bytes}") }

    // The onRead callback is called when some more data has been read into
    // the input stream's buffer.  The input stream will not be available until
    // the onInput call back is called, but onRead can be used to show the 
    // progress of reading the content from the location.
    onRead: function(bytes: Integer) {
        def progress = if (request.toread > 0) "({(bytes * 100 / request.toread)}%)" else "";
        println("bytes read: {bytes} {progress}");
    }

    // The content of a response can be accessed in the onInput callback function.
    // Be sure to close the input sream when finished with it in order to allow
    // the HttpRequest implementation to clean up resources related to this
    // request as promptly as possible.
    onInput: function(is: java.io.InputStream) {
        // use input stream to access content here. 
        // can use input.available() to see how many bytes are available.
        try {
            println("bytes of content available: {is.available()}");
        } finally {
            is.close();
        }
    }

    onException: function(ex: Exception) { println("exception: {ex.printStackTrace()}") }
    onDoneRead: function() { println("doneRead") }
    onDone: function() { println("done") }
}
request.enqueue();

Pozostawiam was z myślami. Czyż nie jest to piękne?