SammyBlackBaron
SammyBlackBaron

Reputation: 897

javascript function not returning correct value

I have this function that checks a UK postcode. The problem is that it never returns true or false - only undefined.

function PostcodeAnywhere_Interactive_FindByPostcode_v1_00(Key, Postcode, UserName) {

    var retval;

    $.getJSON("https://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/FindByPostcode/v1.00/json3.ws?",
    {
        Key: Key,
        Postcode: Postcode,
        UserName: UserName
    },
    function (response) {
        // Test for an error
        if (response.Items.length == 1 && typeof(response.Items[0].Error) != "undefined") {
            // Show the error message
            retval = false;
        } else {
            // Check if there were any items found
            if (response.Items.length == 0){
                retval = false;
            } else {
                retval = true;
            }
        }
    });

return retval;

}

To me it looks like it should always return true or false, so I can't understand where I'm going wrong. Can someone please help? Is it that the getJSON function needs time to execute?

Upvotes: 0

Views: 559

Answers (1)

Nicola Peluchetti
Nicola Peluchetti

Reputation: 76870

It returns undefined because $.getJSON runs asynchronously and for this reason retval is returned before the success function of $.getJSON is executed. If you need to use retval you must call the function that uses it in the callback

   $.getJSON("https://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/FindByPostcode/v1.00/json3.ws?",
    {
        Key: Key,
        Postcode: Postcode,
        UserName: UserName
    },
    function (response) {
        // Test for an error
        if (response.Items.length == 1 && typeof(response.Items[0].Error) != "undefined") {
            // Show the error message
            retval = false;
        } else {
            // Check if there were any items found
            if (response.Items.length == 0){
                retval = false;
            } else {
                retval = true;
            }
            //use retval
            do_something_with_retval(retval);
        }
    });

Upvotes: 9

Related Questions