Функция ошибки Jquery для возврата сообщения об исключении

#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. Спасибо, что заметили! Я допустил ошибку новичка: (