Click here to Skip to main content
15,921,212 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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

JavaScript
 $(document).ready(function() {
            $.endPoint = "http://localhost:4422/Service1.svc";
            $.support.cors = true;

//checkAddress function is within Plugin Code
            $("#formattedAddressContainer").checkAddress({
                nameFuzzySearch: false,
                includeListing: false,
                includePaf: true,
                criteria: {
                    country: "AU"
                    //listingType: "business" // Valid types are 'residential' or 'businesss', default to 'both'
                },

                onSelectAddress: function(el, data) {
                    // Handle response data
                    //alert(data);
                    //alert(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);
                        /*if (data.result.subpremise != null) {
                        $("input[id*='install_address_address']").val(data.result.subpremise + '/' + data.result.street_number + ' ' + data.result.street_name + ' ' + data.result.street_type);
                        }
                        else {
                        $("input[id*='install_address_address']").val(+data.result.street_number + ' ' + data.result.street_name + ' ' + data.result.street_type);
                        }*/
                        $("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()
JavaScript
$.fn.checkAddress = function(options) {

        var isSubpremiseListing = false;
        var subpremiseResultId = null;
		
		// Defaults options are set here
		// Every default goes within the { } brackets as seen below
		// A comma separates the different values
		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"]');
		
		// Validation
		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"]')
		};	
		
		// Apply name autocomplete if exists
		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];
			
			// Skip if parameter element does not exist
			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) {
                       // reset subpremise query
                        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 ) {
                    //  Don't trigger address autocomplete if name is empty for include PAF false
                    if(options.includePaf == false) {
                        if($primaryName.val() == "") {
                            return false;
                        }
                    }
                    
                    // If phone number autocomplete then apply character limit
                    /*if(dataType == "phone_number") {
                        if($(this).val().length < characterLimit) {
                            return false;
                        }
                    }*/
                },
                open: function() {
                    $(".ui-menu").width(366);
                },
                select: function( event, ui ) {
                    if (event.keyCode == 9) { //dont let tab key result in a select
                        return false;
                    }
                    if(ui.item.contains_subpremises) {
                        // Store result_id for subpremise listing
                        subpremiseResultId = ui.item.search_result_id;
                    } else {
					
						// Call select address service
						$.getJSON($.endPoint + '/address/' + ui.item.data.search_result_id, function(data) {
								
							// Replace form address fields
							$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);
							
							// onSelect callback
							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;
}
Posted
Updated 21-Jul-14 13:32pm
v2
Comments
Kornfeld Eliyahu Peter 21-Jul-14 2:33am    
I can't see even a success method? What are you talking about?
virang_21 21-Jul-14 6:46am    
$.ajax is defined within Plugin code which has success method but no error method. My question is if in a function that has $.ajax if you don't define error:function() will it give any error information back to user function ?

function MyFunction()
{
PluginFunction();
}

In my plugin.js file
function PluginFunction()
{
$.ajax(function(){
//make call to get info

success:function(){
Send List of addresses
}

// This bit is missing
error:function(){

}

});
}

1 solution

Quote:
Does that mean if $.ajax inside the plugin function failed it will not give any error information back to the calling application ?
Correct. That code should be handled inside the error block, which is missing in this Ajax call.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900