Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • wilenx 16 posts 66 karma points
    Dec 25, 2013 @ 17:04
    wilenx
    0

    Weird REST/Base behavior ...

    Hello all !

    In my site, a user is being saved in the asp.net Session object. And so, in my master template I decide whether to show the login or logout buttons based on the existence of an object in the Session. This works fine.

    Now, for a logged in user, I have JS script that runs every 10 seconds to call a base method and get a JSON response object with some user specific details. (This is used to update a span element with that data).

    It all works fine when it works ... It seems that every time the App_Data/TEMP folder is being touched (by me or by the umbraco engine after changing some code somewhere) it makes the umbraco engine to retrieve a CACHED version of a JSON response object, so that a JS timered request doesn't truly get to my code, and so I end up with corrupted data being returned to the JS.

    As you can see in my Base code, I first check if the user is connected. The user IS connected, and I still get a "Success=false". The IsUserConnected function works well, no problem there.

    How I manage to determine the data returned from the Base is not good and cached is with examining the response and seeing that the JSON object doesn't hold a newly added dummy field. Moreover, I've debugged the project and didn't stopped at the breakpoint defined at the GetPlayersBalace() first line of code.

    Does anyone encountered with this behavior ? What else can I do to fix that ?


    Base code:

    [RestExtension("AccountingAPI")]
    public class AccountingAPI : BaseRest
    {
        [RestExtensionMethod(ReturnXml = false, AllowAll = true)]
        public static string GetPlayersBalace()
        {
            if (!IsUserConnected)
            {
                return BpSysTools.JS_WrapJSON(new
                {
                    Success = false,
                    CurrencySymbol = string.Empty,
                    Balance = -1,
                    ErrorMessage = GetDictionaryItem("Noty_NotLoggedIn")
                });
            }
    
            // Get the user's balance and return a JSON object with Success=true with the data
            // (or false with the appropriate error message)
        }
    }
    

    My JS script:

    $(document).ready(function () {
         updateBalanceLoop();
    });
    
    function updateBalanceLoop() {
        var spanCurrentUsername = $('#spanCurrentUsername');
        var spanCurrentCurrencySymbol = $('#spanCurrentCurrencySymbol');
        var spanCurrentBalance = $('#spanCurrentBalance');
    
        $.ajax({
            url: "/Base/AccountingAPI/GetPlayersBalace",
            cache: false,
            dataType: 'json',
            success: function (response) {
                if (response.Success) {
                    spanCurrentUsername.html(response.Username);
                    spanCurrentCurrencySymbol.html(response.CurrencySymbol);
                    spanCurrentBalance.html(response.Balance);
    
                    setTimeout(updateBalanceLoop, 10000);
                }
                else {
                    // notify the user
                }
            }
        });
    }
    
  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies