Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Postcodes.io bulk lookup

Tags:

ajax

I am trying to use the following API https://postcodes.io/ and perform a bulk lookup using AJAX.

I can use the syntax provided in the documents to do a single postcode lookup like so:

$.ajax({
        type: "POST",
        url: 'https://api.postcodes.io/postcodes/BS16AA',
        success: function (response) {
            console.log(response);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            var msg = '';
            if (xhr.status === 0) {
                msg = 'Not connect.\n Verify Network.';
            } else if (xhr.status == 404) {
                msg = 'Requested page not found. [404]';
            } else if (xhr.status == 500) {
                msg = 'Internal Server Error [500].';
            } else if (thrownError === 'parsererror') {
                msg = 'Requested JSON parse failed.';
            } else if (thrownError === 'timeout') {
                msg = 'Time out error.';
            } else if (thrownError === 'abort') {
                msg = 'Ajax request aborted.';
            } else {
                msg = 'Uncaught Error.\n' + xhr.responseText;
            }
        }
    });

However the example for "bulk lookups" is much less helpful (it looks like it wants an object with an array under a property called "postcodes: [myArrayHere]") I haven't managed to find a working example or create one myself. Using the example code above and the syntax for the bulk lookup i'd like to perform only a few ajax calls to lookup around 200 postcodes (the site says the limit is 100 at a time so I can break them in to several arrays). The time it takes to do a lookup for 200 postcodes in a loop is not really feasible for my project.

like image 385
Mr Dansk Avatar asked May 21 '18 10:05

Mr Dansk


Video Answer


1 Answers

You need to use it like below

$.ajax({
        type: "POST",
        url: 'https://api.postcodes.io/postcodes/',
        data: { postcodes: ["code1", "code2"] }
        success: function (response) {
            console.log(response);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            var msg = '';
            if (xhr.status === 0) {
                msg = 'Not connect.\n Verify Network.';
            } else if (xhr.status == 404) {
                msg = 'Requested page not found. [404]';
            } else if (xhr.status == 500) {
                msg = 'Internal Server Error [500].';
            } else if (thrownError === 'parsererror') {
                msg = 'Requested JSON parse failed.';
            } else if (thrownError === 'timeout') {
                msg = 'Time out error.';
            } else if (thrownError === 'abort') {
                msg = 'Ajax request aborted.';
            } else {
                msg = 'Uncaught Error.\n' + xhr.responseText;
            }
        }
    });

See the test case they have which show the expected data

https://github.com/ideal-postcodes/postcodes.io/blob/373fda002692542f21330088154d3d4965a1cd65/tests/filter.integration.js#L33

like image 157
Tarun Lalwani Avatar answered Sep 22 '22 14:09

Tarun Lalwani