2014-10-13 3 views
1

Im помощью Google геокодер, и я не могу показаться, чтобы найти способ, чтобы установить значение глобальной переменной внутри функции обратного вызоваJavaScript: получение значения переменных внутри функции обратного вызова

var status_temp; 
var lat_temp; 
var lng_temp; 
var error_temp; 
function set_status(status_input){ 
    status_temp=status_input; 
} 
function set_lat(lat_input){ 
    lat_temp=lat_input; 
} 
function set_lng(lng_input){ 
    lng_temp=lng_input; 
} 
function set_error(error_input){ 
    error_temp=error_input; 
} 
function geocode_address(address_input){ 
    var status_string; 
    var error_message; 
    var lat; 
    var lng; 
    geocoder.geocode({ 'address': address_input}, function(results, status){ 
     if (status == google.maps.GeocoderStatus.OK) { 
      set_status('found'); 
      set_lat(results[0].geometry.location.lat()); 
      set_lng(results[0].geometry.location.lng()); 
     } else { 
      console.log("Geocode was not successful for the following reason: " + status); 
      set_status('notfound'); 
      set_status(status); 
     } 
    }); 
    console.log(status_temp); 
    if(status_temp==='found'){ 
     var data = ({ 
      status_string:status_temp, 
      lat:lat_temp, 
      lng:lng_temp, 
     }); 
    }else{ 
     var data = ({ 
      status_string:status_temp, 
      error_string:error_temp, 
     }); 
    } 
    return data; 
} 

Я пытался делать нормальный способ установить глобальные переменные, объявляющие переменную вне функции, эта последняя попытка ive использует функции для установки переменных. Что я делаю не так?

+0

Я бы посоветовал вам прочитать это, чтобы узнать, как обращаться с возвращаемыми значениями из асинхронных вызовов. Это сообщение об аякс-звонках, но это то же самое, что и у вас здесь: http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call – jfriend00

+1

все, что вы нужно сделать, чтобы перевести консольный вызов в обратный вызов. бам, сделано. – dandavis

+0

@ dandavis - очевидно, здесь больше объектива, чем просто 'console.log()'. OP должен научиться обрабатывать результаты async либо в обратном вызове, либо путем вызова другой функции из обратного вызова и передачи данных на нее. – jfriend00

ответ

2

Вам нужно прочитать об асинхронных вызовах JavaScript.
Вы пытаетесь использовать глобалы, когда они еще не установлены.
Ваша функция не может просто вернуться, ей необходимо использовать обратный вызов для возврата значений, и обратный вызов необходимо вызвать изнутри обратного вызова геокода
Обратите внимание, что в заголовке вашего вопроса указано «внутри обратного вызова», но вы не выполняете консольный журнал изнутри, в настоящее время извне.

Смежные вопросы