cancel
Showing results for 
Search instead for 
Did you mean: 

Busy Indicator does not appear before AJAX call executes

Former Member
0 Kudos

Hello,

I’m trying to display a BusyIndicator on my screen after a button click event, and hide it when execution of the corresponding call returns.  If I put a breakpoint in my code before the AJAX call fires, the busy indicator appears, but if I do not have a breakpoint and click the button, the busy screen never pops up, even though execution of the call takes 20-25 seconds.  What can I change to make sure the busy indicator comes up every time?


executeCall = function (oData, viewPrefix) {

        var message = [];

        var success = false;

     

       sap.ui.core.BusyIndicator.show(0);

        $.ajax({

            type: 'POST',

            url: pps.config.pmvSvcUri,

            data: JSON.stringify(oData),

            contentType: 'application/json',

            async: false

        }).done(function (results) {

            if (results.errors.length > 0) {

                utilities.displayError(results.errors[0]);

            }

            else if (results.messages.length > 0) {

                 results.messages.forEach(function (msg) {

                      message.push(

                      + "EVENT_DATE: " + msg.EVENT_DATE + "; \n"

                      + "USERID: " + msg.USERID + "; \n"

                      + "FUNCTION_NAME: " + msg.FUNCTION_NAME + ";\n"

                      + "ERROR_MSG: " + msg.ERROR_MSG + "; \n"

                      + "ERROR_CODE: " + msg.ERROR_CODE + "; \n"

                      + " - " + msg.ERROR_DTL

                      + "\n");

                });

               utilities.displayError(message[0], results.messages[0].ERROR_MSG);

                sap.ui.core.BusyIndicator.hide();

            }

       else {

       success = true;

       if (results.insertedPmtId){

            oData[0].ID = results.insertedPmtId;

       }

       sap.ui.core.BusyIndicator.hide();

       }

        }).fail(function (results) {

            if (results.error.length > 0) {

                 utilities.displayError("Error: " + results.error, 'Error');

            }

            else {

                 utilities.displayError("Error: " + results.status + ' ' + results.statusText, 'Error');

            }

            sap.ui.core.BusyIndicator.hide();

        });

        return success;

    },

Accepted Solutions (1)

Accepted Solutions (1)

former_member182862
Active Contributor
0 Kudos

hi Andy

If the ajax call is synchronous, then the browser to block until the response returns, hence there are no chance for the indicator to appear.

thanks

-D

Former Member
0 Kudos

I had to rework some of the call-backs, but you are right, changing the call to asynchronous did the trick.

0 Kudos

I love you ❤️

Answers (0)