Question

I use the free geocoding API of mapquest

I want to check if the request is sucessfull, but returned no data.

I type "vdfsbvdf54vdfd" (just a silly string) as adress in a form field. I expect an alert like so "Sorry, wrong input". Alert never happens.

This is my code snippet

$.ajax({
     type: "POST",
     url: "`http://open.mapquestapi.com/geocoding/v1/address?key=012`",
     data: { location: ad, maxResults: 1}
     })


 .done(function( response ) {alert(response);
         var geoclng = response.results[0].locations[0].latLng.lng;
        var geoclat = response.results[0].locations[0].latLng.lat;

        if (geoclng=="") {alert("Sorry, wrong input");}

         //now use lon/lat on map etc
                          )}

I tried if (geoclng=="") {alert("Sorry, wrong input");}

also if (response.length=0) {alert("Sorry, wrong input");}

and also if ($.isEmptyObject(response)) {alert("Sorry, wrong input");}

and alert never happens.

If it helps, when I alert the response I get object Object.

Thanks in advance

Was it helpful?

Solution

Remove the extra single quotes around the url and check for the length of the locations array:

$.ajax({
     type: "POST",
     url: "http://open.mapquestapi.com/geocoding/v1/address?key=012",
    data: { location: ad, maxResults: 1}
     })
 .done(function( response ) {
     alert(response.results[0].locations.length); //if greater than zero, you have results
     if( response.results[0].locations.length > 0 ){
         var geoclng = response.results[0].locations[0].latLng.lng;
         var geoclat = response.results[0].locations[0].latLng.lat;
         //now use lon/lat on map etc
     } else {
         alert("Sorry, wrong input");
     }
  )}

When you run a call to http://open.mapquestapi.com/geocoding/v1/address?key=012, it is going to return an object whether or not there were matches. The contents of that object's locations array will be empty is nothing was found.

response.length == 0 or response == "" will evaluate to false since there is always a response returned.

OTHER TIPS

Try adding this one in your ajax code:

$.ajax({
  type: "POST",
  url: "http://open.mapquestapi.com/geocoding/v1/address?key=012",
  data: { 
     location: ad, maxResults: 1
  }
})

Add this one (just under the data parameter)

success: function (response) {
  if (response == '') {
    alert('Sorry!');
  }
}

This will run on the success event, and will check for the response returned from the server. Then an if else block to test its value.

I would like to forward you to learn more about jQuery Ajax API: http://api.jquery.com/jquery.ajax/

Try below code to check the success/failed request.

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.get("example.php", function() {
    alert("success");
})
.done(function() {
    alert("second success");
})
.fail(function() {
    alert("error");
})
.always(function() {
    alert("finished");
});
// Perform other work here ...
// Set another completion function for the request above
jqxhr.always(function() {
    alert("second finished");
});

for more detail read more on this link https://api.jquery.com/jQuery.get/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top