$ .ajax没有错误功能 [英] $.ajax with no error function
问题描述
我正在使用第三方插件之一进行地址验证。在我的应用程序中,我从它们的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屋!