#jquery #json #api #map #geonames
#jquery #json #API #словарь #геонимы
Вопрос:
У меня есть функция автозаполнения ввода, при которой посетители вводят местоположение, и она выдает предложения во время ввода. Для этого я использую веб-сервер Geonames.
Я пытаюсь вернуть сообщение об исключении, если на веб-сервере Geonames возникает ошибка. Например, если я превысил лимит запросов веб-сервера, я хочу, чтобы скрипт отправил мне предупреждение по электронной почте.
Возвращаемое сообщение об исключении является JSON.
Это часть скрипта с функцией error(). Я намеренно допустил опечатку в параметре username в data, чтобы получить ошибку, но предупреждение не появляется.
$(function() {
$( "#city" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://api.geonames.org/searchJSON",
dataType: "jsonp",
data: {
q: request.term,
countryBias: "US",
featureClass: "P",
style: "full",
maxRows: 10,
ussername: "demo",
operator: "OR"
},
success: function( data ) {
response( $.map( data.geonames, function( item ) {
return {
label: item.name (item.adminName1 ? ", " item.adminName1 : "") ", " item.countryName,
value: item.name,
saved_country: item.countryName,
saved_state: item.adminName1,
saved_city: item.name,
saved_zipcode: item.postalcode,
saved_latitude: item.lat,
saved_longitude: item.lng,
}
}));
},
error: function( data ) {
response( $.map( data.geonames, function( item ) {
return {
request_status: item.status
}
alert("Error msg!");
}));
},
});
},
Комментарии:
1. вы не можете вернуть данные из асинхронно вызываемых функций.
Ответ №1:
Geonames вернет эту информацию об ошибке в поисковике успеха, а не в обработчике ошибок. Таким образом, вам придется запрашивать внутри вашей функции успеха:
success: function( data ) {
if(typeof(data.status) != 'undefined'){ //It means there was an error
var errorObject = data;
//Now you have access to errorObject.status, errorObject.status.message and so on
//Do something with your error object
return; //Avoid execution of the rest of the code of this function
} //Can add an else here if you want
response( $.map( data.geonames, function(item){
...
}
Надеюсь, это поможет. Приветствия
Ответ №2:
элемент не был объявлен в этой области. Попробуйте это:
error: function( data ) {
var request_status= data.status;
//do stuff with status
}
Комментарии:
1. Спасибо, что заметили! Я допустил ошибку новичка: (