我有一个网页,可以使用GIS服务器上的网络服务搜索地址。只需点击一下按钮,我就可以使用JQuery
AJAX
方法调用此网络服务。在AJAX
success
函数中,我将地址值映射到页面上的控件。在此之前,我会检查用户角色。
支票本身并不重要。如果检查失败,我alert()
用户。我遇到的问题是每当检查失败时alert()重复6次。调试时看起来AJAX调用不会重复多次。
function SelectAddress() {
var url = $.url.build({
protocol: 'https',
host: 'maps.site.co.za',
path: '/arcgis/rest/services/Search_Layers/SL_ADD/MapServer/find',
params: {
'searchText': SelectedAddressIsisKey,
'Contains': 'True',
'searchFields': 'ISIS Key',
'Layers': 0,
'returnCountOnly': 'false',
'returnZ': 'false',
'returnM': 'false',
'f': 'pjson'
}
});
$.ajax({
url: url,
type: 'GET',
cache: false,
dataType: 'jsonp',
success: function (data) {
// call autocomplete callback method with results
$.map(data.results[0].value, function (item) {
var _role = document.getElementById('txtRole').value;
var _addressNo = data.results[0].attributes['Addr No'];
var _suffix = data.results[0].attributes['Address No Suffix'];
var _streetName = data.results[0].attributes['Street Name'];
var _streetType = data.results[0].attributes['Street Name Type'];
var _suburb = data.results[0].attributes['Official Suburb Name'];
var _ward = data.results[0].attributes['Ward Name'];
var _subCouncil = data.results[0].attributes['Subcouncil Name'];
var _erfNo = data.results[0].attributes['Property Number'];
var _isisKey = data.results[0].attributes['ISIS Key'];
var _subCouncilNo = _subCouncil.substr(_subCouncil.length - 2, 2);
//Check Subcouncil of logged in user
if (_role == "Admin" || _role.substr(_role.length - 2, 2) == _subCouncilNo) {
document.getElementById('<%=TextBoxAddressNumber.ClientID%>').value = _addressNo;
document.getElementById('<%=ddlAddressSuffix.ClientID%>').value = _addressNo;
document.getElementById('<%=TextBoxRoad.ClientID%>').value = _streetName + " " + _streetType;
document.getElementById('<%=TextBoxSuburb.ClientID%>').value = _suburb;
document.getElementById('<%=ddlWard.ClientID%>').value = _ward;
document.getElementById('<%=ddlSubCouncil.ClientID%>').selectedIndex = _subCouncilNo;
document.getElementById('<%=txtErf.ClientID%>').value = _erfNo;
document.getElementById('<%=lblLISKey.ClientID%>').value = _isisKey;
jQuery('#Search-modal').dialog('close');
//return;
}
else {
alert("Error: This address is in Sub-Council " + _subCouncilNo);
//jQuery('#Search-modal').dialog('close');
}
//return;
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('error - ' + textStatus + errorThrown + XMLHttpRequest);
//console.log('error', textStatus, errorThrown);
}
});
}
答案 0 :(得分:0)
我明白了。
jQuery.map()
描述:将数组或对象中的所有项目转换为新的项目数组。
所以,我需要做的是:
$.map(data.results[0].value[0], function (item) { ... }