Hello everyone,

I am working on making Ajax calls from a Panel/JavaScript component. This
component is entirely written in Typescript and uses a canvas element. The
only HTML elements within the Panel are <div><canvas></canvas></div> to
render the canvas.

I would like to retrieve some information from the server when the
JavaScript component initializes. I was thinking of using Wicket.Ajax.get
for this. Throughout the lifecycle of the JavaScript component, additional
Ajax calls will be needed.

On the server side, I believe I need to use an AbstractDefaultAjaxBehavior.
I want to use GET for retrieving data and POST with a JSON body for sending
data.

Here’s my current implementation in the Panel:

ajaxBehavior = new AbstractDefaultAjaxBehavior() {
    @Override
    protected void respond(AjaxRequestTarget target) {
        final StringValue requestValue =
getRequest().getRequestParameters().getParameterValue("request");
        if (requestValue.isEmpty() &&
ajaxDispatchers.containsKey(requestValue.toString())) {
            final String request = requestValue.toString();
            ajaxDispatchers.get(request).execute();
            getRequestCycle().scheduleRequestHandlerAfterCurrent(new
TextRequestHandler("application/json", "UTF-8",
jsonService.toJson(Action.builder().action("translations").build())));
        }
    }
};
add(ajaxBehavior);

Here is the code for the first Ajax call (TypeScript):

Wicket.Ajax.get({
    u: ajaxCallbackUrl,
    c: componentId,
    ep: {'request':'translations'},
    dt: 'json',
    sh: function (attributes: any) {
        console.log("AJAX callback success:", attributes);
    },
    fh: function (attributes: any) {
        console.error("AJAX callback failure:", attributes);
    }
});

The call is made to the server, but the JSON response is not parsed
correctly, and I get the following error in the browser console:

Wicket.Ajax.Call.failure: Error while parsing response: SyntaxError:
Unexpected token '<', "<?xml vers" is not valid JSON
Indeed, the server response is and it's not the JSON I'm sending with my
panel:
<?xml version="1.0" encoding="UTF-8"?><ajax-response></ajax-response>

Where did I go wrong?

Thank you for your help!

Regards,

Stef

Reply via email to