I am using one of the third party plugin for address validation. In my application I am calling one function checkAddress () from their implementation of JQuery plugin. Looking at the plugin code it internally makes $.ajax call and return list of addresses on success:function() but there is no error:function() {} implementation inside any of the $.ajax in the plugin code. Does that mean if $.ajax inside the plugin function failed it will not give any error information back to the calling application ?
Here is my implementation
$(document).ready(function() {
$.endPoint = "http://localhost:4422/Service1.svc";
$.support.cors = true;
$("#formattedAddressContainer").checkAddress({
nameFuzzySearch: false,
includeListing: false,
includePaf: true,
criteria: {
country: "AU"
},
onSelectAddress: function(el, data) {
if (data.status == "OK") {
$("input[id*='install_address_state']").val(data.result.state);
$("input[id*='install_address_postcode']").val(data.result.postcode);
$("input[id*='install_address_subpremise']").val(data.result.subpremise);
$("input[id*='install_address_streetno']").val(data.result.street_number);
$("input[id*='install_address_streetname']").val(data.result.street_name + ' ' + data.result.street_type);
$("input[id*='install_address_suburb_name']").val(data.result.suburb);
$("textarea[id*='install_address_resp']").val(JSON.stringify(data.result, undefined, 2));
}
}
});
});
inside the checkAddress() function implementation there is only success:function() but no error:function().
Plugin's code for checkAddress()
$.fn.checkAddress = function(options) {
var isSubpremiseListing = false;
var subpremiseResultId = null;
var defaults = {
includePaf: true,
includeListing: true,
addressMinLength: 0,
nameMinLength: 2,
delay: 200,
limit: 10,
criteria: {
country: "AU",
postcode: "",
state: "",
city: "",
listingType: ""
},
onSelectAddress: function(el, data) { },
onSelectName: function(el, data) { }
};
var options = $.extend(defaults, options);
var $addressContainer = this;
var $primaryName = $addressContainer.find('*[data-address-attr="primary_name"]');
if(options.includePaf == false && $primaryName.length == 0) {
console.error("TC Error: Address autocomplete requires a primary name element if configured to exclude PAF");
return this;
}
if(options.includeListing == true && $primaryName.length == 0) {
console.error("TC Error: Address autocomplete requires a primary name element if configured to exclude PAF");
return this;
}
var $addressParameters = {
subpremise: $addressContainer.find('*[data-address-attr="subpremise"]'),
street_number: $addressContainer.find('*[data-address-attr="street_number"]'),
street_name: $addressContainer.find('*[data-address-attr="street_name"]'),
street_type: $addressContainer.find('*[data-address-attr="street_type"]'),
suburb: $addressContainer.find('*[data-address-attr="suburb"]'),
state: $addressContainer.find('*[data-address-attr="state"]'),
city: $addressContainer.find('*[data-address-attr="city"]'),
postcode: $addressContainer.find('*[data-address-attr="postcode"]'),
street_address: $addressContainer.find('*[data-address-attr="street_address"]'),
formatted_address: $addressContainer.find('*[data-address-attr="formatted_address"]'),
country: $addressContainer.find('*[data-address-attr="country"]')
};
if($primaryName.length > 0) {
$primaryName.totalCheckName( {
listingType: options.criteria.listingType,
limit: options.limit,
minLength: options.nameMinLength,
onSelect: options.onSelectName
});
}
for(var parameter in $addressParameters) {
var ele = $addressParameters[parameter];
if(ele.length == 0)
continue;
ele.autocomplete({
source: function( request, response ) {
$.ajax({
url: $.endPoint + "/address",
data: {
listing_type: options.criteria.listingType,
primary_name: ($primaryName.length > 0 ? $primaryName.val() : ""),
subpremise: ($addressParameters.subpremise.length > 0 ? $addressParameters.subpremise.val() : ""),
street_number: ($addressParameters.street_number.length > 0 ? $addressParameters.street_number.val() : ""),
street_name: ($addressParameters.street_name.length > 0 ? $addressParameters.street_name.val() : ""),
street_type: ($addressParameters.street_type.length > 0 ? $addressParameters.street_type.val() : ""),
street_address: ($addressParameters.street_address.length > 0 ? $addressParameters.street_address.val() : ""),
formatted_address: ($addressParameters.formatted_address.length > 0 ? $addressParameters.formatted_address.val() : ""),
suburb: ($addressParameters.suburb.length > 0 ? $addressParameters.suburb.val() : ""),
state: (options.criteria.state != "" && $addressParameters.state.length == 0) ? options.criteria.state : $addressParameters.state.val(),
city: (options.criteria.city != "" && $addressParameters.city.length == 0) ? options.criteria.city : $addressParameters.city.val(),
postcode: (options.criteria.postcode != "" && $addressParameters.postcode.length == 0) ? options.criteria.postcode : $addressParameters.postcode.val(),
country: (options.criteria.country != "" && $addressParameters.country.length == 0) ? options.criteria.country : $addressParameters.country.val(),
search_result_id: subpremiseResultId,
include_paf: options.includePaf,
include_listing: options.includeListing
},
dataType: "json",
success: function(data) {
subpremiseResultId = null;
response($.map(data.results.slice(0, options.limit), function (item) {
return {
value: item.street_address,
label: item.formatted_address,
contains_subpremises: item.contains_subpremises,
search_result_id: item.search_result_id,
street_address: item.street_address,
formatted_address: item.formatted_address,
postcode: item.postcode,
suburb: item.suburb,
state: item.state,
city: item.city,
is_listing: item.is_listing,
data: item
}
}));
}
});
},
delay: options.delay,
minLength: options.addressMinLength,
search: function( event, ui ) {
if(options.includePaf == false) {
if($primaryName.val() == "") {
return false;
}
}
},
open: function() {
$(".ui-menu").width(366);
},
select: function( event, ui ) {
if (event.keyCode == 9) {
return false;
}
if(ui.item.contains_subpremises) {
subpremiseResultId = ui.item.search_result_id;
} else {
$.getJSON($.endPoint + '/address/' + ui.item.data.search_result_id, function(data) {
$addressParameters.subpremise.val(data.result.subpremise);
$addressParameters.street_number.val(data.result.street_number);
$addressParameters.street_name.val(data.result.street_name);
$addressParameters.street_type.val(data.result.street_type);
$addressParameters.suburb.val(data.result.suburb);
$addressParameters.postcode.val(data.result.postcode);
$addressParameters.state.val(data.result.state);
$addressParameters.street_address.val(data.result.street_address);
$addressParameters.formatted_address.val(data.result.formatted_address);
options.onSelectAddress(ele, data);
return false;
});
}
},
close: function() {
if(subpremiseResultId != null) {
$(this).autocomplete("search");
}
},
create: function(event, ui) {
$('.ui-autocomplete').wrap('<span class="totalcheck"></span>');
},
messages: {
noResults: '',
results: function() {}
}
}).bind('focus', function(){
var ac = $(this);
setTimeout(function() {
ac.autocomplete("search");
isNameSelected = false;
}, 100);
}).data( "ui-autocomplete" )._renderItem = function( ul, item ) {
var partial = "<a><table width='100%'><tr><td>";
partial += item.label + "</td><td width='60' valign='middle'>";
if(item.is_listing) {
partial += "" style="float: right; font-size: 14px; color: rgba(0, 85, 195, 1)">";
}
if(item.contains_subpremises) {
partial += "^__i class="tc-icon-subpremise">";
}
partial += "</td></tr></table></a>";
return $( "<li>" )
.append( partial )
.appendTo( ul );
};
};
return this;
}