0

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?

5
  • possible duplicate of Return Value from inside of $.ajax() function -- please use the search before you ask a question. Commented Feb 13, 2012 at 16:25
  • Anybody else read Nick Craver's blog post about SO storage requirements? I wonder how much of the disk array is taken up by questions like this? :-) Commented Feb 13, 2012 at 16:28
  • simply because you return retval before setting it (asynchronous) Commented Feb 13, 2012 at 16:29
  • Sorry everyone for posting a question already asked - I didn't realise that $.getJSON worked in a similar way as $.ajax and that it was therefore asynchronous Commented Feb 13, 2012 at 16:46
  • Possible duplicate of Return Value from inside of $.ajax() function Commented Dec 13, 2017 at 16:19

1 Answer 1

9

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);
        }
    });
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.