$ .ajax没有错误功能 [英] $.ajax with no error function

查看:86
本文介绍了$ .ajax没有错误功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用第三方插件之一进行地址验证。在我的应用程序中,我从它们的JQuery插件实现中调用一个函数checkAddress()。查看插件代码,它在内部进行$ .ajax调用,并在成功时返回地址列表:function()但在插件代码中的任何$ .ajax中都没有错误:function(){}实现。这是否意味着如果插件函数中的$ .ajax失败,它将不会将任何错误信息返回给调用应用程序?



这是我的实施



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;

//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));

                    }

                }
            });
        });





里面的checkAddress()函数实现只有成功:function()但是没有错误:function ()。



checkAddress的checkAddress代码()



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;
		
		// 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: #0055C3">(S)";
                }
                
                if(item.contains_subpremises) {
                    partial += "">";
                }
                
                partial += "</td></tr></table></a>";

                return $( "<li>" )
                .append( partial )
                .appendTo( ul );
            };
        };
			
    return this;
}

推荐答案

.ajax调用并返回成功地址列表:function()但没有错误:function (){}在插件代码中的任何
.ajax call and return list of addresses on success:function() but there is no error:function() {} implementation inside any of the


.ajax中实现。这是否意味着如果插件函数中的
.ajax in the plugin code. Does that mean if


.ajax失败,它将不会将任何错误信息返回给调用应用程序?



这是我的实施



.ajax inside the plugin function failed it will not give any error information back to the calling application ?

Here is my implementation


这篇关于$ .ajax没有错误功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆