2015-04-16 1 views
0

Я пытаюсь сохранить значения широты и долготы из ответа, полученного из API геокодирования Google. Сейчас я использую фиксированное местоположение в Калифорнии. Мой HTTP-запрос продолжает возвращаться не определен.Javascript Google Geocode Returning Undefined (не может определить функцию обратного вызова)

Я много оглядывался, и я вижу, что у людей такая же проблема, но я не могу обернуть голову вокруг создания функции обратного вызова, которая, кажется, является решением, может кто-нибудь объяснить мне, как это сделать это? Я знаю, что мой запрос CORS работает, потому что я использую его, чтобы говорить GET с сервера Heroku, который я создал.

var geocode = new XMLHttpRequest(); 
geocode = createCORSRequest('GET', 'https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key='); 

geocode.onload = function() { 
    var geoData = JSON.parse(geocode.responseText); // parse the JSON from geocode response 
    var results = geoData["results"]; // create variable for results 

    var userLong = results["geometry"]["location"]["lng"]; // parse the latitude 
    var userLat = results["geometry"]["location"]["lat"]; // parse the longitude 
    console.log(userLong); 
    console.log(userLat); 
} 

createCORSRequest()

// Create the XHR object. 
function createCORSRequest(method, url) { 
if ("withCredentials" in xhr) { 
    // XHR for Chrome/Firefox/Opera/Safari. 
    xhr.open(method, url, false); 
} else if (typeof XDomainRequest != "undefined") { 
    // XDomainRequest for IE. 
    xhr = new XDomainRequest(); 
    xhr.open(method, url); 
} else { 
    // CORS not supported. 
    xhr = null; 
} 
return xhr; 
} 
+0

Какая ошибка в js? – Kushal

+1

показать нам createCORSRequest() – dandavis

+0

@ Kushal, он говорит, что он не может достичь геометрии неопределенного. – Ryan

ответ

0

похоже, что вы следите HTML5Rocks сайт Using CORS артикул.

После того как вы создали запрос xhr. Вы должны вызвать метод send(), чтобы вызвать вызов ajax.

var geocode = new XMLHttpRequest(); 
geocode = createCORSRequest('GET', 'https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key='); 

geocode.onload = function() { 
    var geoData = JSON.parse(geocode.responseText); // parse the JSON from geocode response 
    var results = geoData["results"]; // create variable for results 

    var userLong = results["geometry"]["location"]["lng"]; // parse the latitude 
    var userLat = results["geometry"]["location"]["lat"]; // parse the longitude 
    console.log(userLong); 
    console.log(userLat); 
} 

geocode.send(); 

Если вы не вызовете geocode.send(), значение будет неопределенным, как никакой запрос не был уволен.

+0

Это совершенно разумно. Не могу поверить, что я это забыл! Хотя я действительно добавлял его в конец кода, я все еще получаю сообщение об ошибке, которое все еще говорит о том, что ответ не определен – Ryan

+0

Спасибо. Вам нужно изменить 'var userLong = results [" geometry "] [" location "] [" lng "];' следующим образом: make userLong = results [0] ["geometry"] ["location"] [ "LNG"]; '. Вам нужно указать на первый элемент массива «результат» – IgorM

0

Предполагая createCORSRequest, возвращает xhr или xhr -как объект (который, кажется, типичный для шаблонного createCORSRequest из таких мест, как HTML5 Rocks сайт), вам необходимо включить geocode.send(); в конце вашего кода. В противном случае запрос никогда не срабатывает, и поэтому обработчик onload никогда не будет вызван.

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