Sorry, I found my stupidity: I forgot the ! in the condition :-(

if (requestValue.isEmpty() &&
ajaxDispatchers.containsKey(requestValue.toString())) {

if (!requestValue.isEmpty() &&
ajaxDispatchers.containsKey(requestValue.toString())) {

The JSON is now sent to the client, but wicket-ajax-jquery.js is creating
an error because it's waiting for the tag ajax-response:

wicket-ajax-jquery-ver-1722411717821.js:219 Wicket.Ajax.Call.failure: Error
while parsing response: TypeError: envelope.getElementsByTagName is not a
function


Le sam. 16 nov. 2024 à 10:37, Stéphane V. <sva...@gmail.com> a écrit :

> 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