2009-08-26 3 views
2

Это, наверное, очень глупый вопрос. Я пытаюсь сделать геолокацию, чтобы найти адрес пользователя на основе их IP-адреса, используя api, предоставленный http://www.hostip.info/use.html. Я использую это в сочетании с jquery со следующим кодом:Геолокации с помощью hostip с javascript

$.get("http://api.hostip.info/get_html.php", function(data){ 
    alert("Data Loaded: " + data); 
}); 

К сожалению, это не работает. Предупреждение никогда не срабатывает, поэтому я предполагаю, что вызов никогда не возвращается. Кто-нибудь делал это раньше? Спасибо

ответ

4

Я не думаю, что призыв к ним успешный. Кросс-доменные ограничения, вероятно, помешают вам прочитать данные результата. Если hostip предложил JSONP API, это было бы полезно, но я не видел упоминания об одном на своем сайте.

+0

Ну [hostip предлагает API JSON] (http://www.hostip.info/use.html) и поддерживает [CORS] (http://en.wikipedia.org/wiki/Cross-origin_resource_sharing), но некоторые браузеры, включая Internet Explorer 9, не поддерживают CORS. – hippietrail

-1

Вы не можете звонить в иностранные домены из javascript. Это определенно проблема. Вам либо нужно настроить прокси-скрипт на вашем сервере, который извлекает удаленные страницы для вас, либо найти службу, чем реализует JSONP, как указано выше.

+0

Теперь вы можете совершать звонки в иностранные домены из JavaScript с помощью современных браузеров. Большинство из них поддерживают 'CORS' и' http: // api.hostip.info/get_json.php' также поддерживает 'CORS'. – hippietrail

0

Вы не можете совершать междоменные вызовы для данных XML. Другие сайты предлагают интерфейс JSON:

http://ipinfodb.com/ip_query.php?ip=999.999.999.999&output=json 

, которые вы можете Междоменный вызов с помощью YUI GET Utility или с помощью JQuery.

2

Если вы используете API AJAX от Google, то действительно легко получить местоположение, используя их функциональность Client Location - для этого не требуются междоменные вызовы.

if (google.loader.ClientLocation) { 
    var lat = google.loader.ClientLocation.latitude; 
    var lon = google.loader.ClientLocation.longitude; 
    ... 

В противном случае, как и другие указали, вам нужна услуга, которая обеспечивает JSONP или вам нужно написать прокси-сервер на своем сервере, чтобы получить данные для вас.