Кросс-доменные проблемы jQuery .AJAX - PullRequest
2 голосов
/ 30 августа 2011

Я пытаюсь использовать функцию .AJAX jQuery для отправки запроса в API IPINFODB, чтобы получить геолокацию пользователей, посещающих наш сайт.

Проблема в том, что я могу собрать jQuery.Функция AJAX не разрешает междоменные запросы и, в свою очередь, ничего не возвращает.

Следующий код выдает предупреждение [blank]

$.ajax({
    type: "POST",
    url: "http://api.ipinfodb.com/v3/ip-city/ip_query.php",
    data: "key=***********&format=json&ip=<?php echo $_SERVER['REMOTE_ADDR']; ?>",
    success: function(r) {

        alert(r);

    }
});

Я испробовал все варианты параметров длязапрос .AJAX, такой как GET, JSON, бла-бла-бла, но все равно ничего.Кто-нибудь знает другой способ сделать запрос к этому API через AJAX?Желательно не использовать YQL.

Ответы [ 5 ]

3 голосов
/ 15 сентября 2011

Это можно сделать с помощью AJAX.Вам нужно будет использовать JSONP, чтобы обойти междоменные проблемы.

Вот код:

$.getJSON("http://api.ipinfodb.com/v3/ip-city/?key=API_KEY&format=json&callback=?" )
 .error (function  () {
    // error code
 }) 
 .success(function (result) { 
    // success code
    console.log(result); 
    console.log("your location is", result.latitude, result.longitude);
 });

Вам нужно будет заменить API_KEY своим собственным ключом API.

1 голос
/ 30 августа 2011

Я недавно реализовал для плагина WordPress.

Вот как выглядел мой вызов AJAX:

jQuery.ajax({
type : "GET",
url : "action.php",
data : {    
    ipinfodb_api_key : "<?php echo $ipinfodb_api_key; ?>",
    ip : "<?php echo $_SERVER['REMOTE_ADDR']?>"},
        success : function(response) {
            jQuery("#<?php echo $widgetid; ?>").html(response);
    }
});

Вот моя функция в action.php, которая обрабатывает эту информацию:

function processData($ipinfodb_api_key, $ip) {
$longitude = null;
$latitude = null;
$url = 'http://api.ipinfodb.com/v2/ip_query.php?key='.$ipinfodb_api_key.'&ip='.$ip.'&timezone=false';
$content = @file_get_contents($url);
if ($content != FALSE) {
    $xml = new SimpleXmlElement($content);
    if ($xml->Latitude) $latitude = $xml->Latitude;
    if ($xml->Longitude) $longitude = $xml->Longitude;
}
    // return latitude or longitude or do further processing
}
0 голосов
/ 30 августа 2011

Попробуйте этот URL:

http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>&format=json&callback=?

... и отправьте запрос через GET (оставьте данные пустыми)

http://ipinfodb.com/ip_location_api_json.php

0 голосов
/ 30 августа 2011

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

0 голосов
/ 30 августа 2011

Если удаленный сервер не поддерживает JSONP, из-за ограничения в той же политике происхождения вы не можете вызывать его напрямую из javascript (если, конечно, вы не пишете свой собственный браузер и реализацию javascript, которая не ' не уважать эту политику).

Чтобы обойти это ограничение, вы можете написать серверный скрипт на вашем домене, который будет служить мостом между вашим доменом и удаленным доменом (api.ipinfodb.com), а затем отправить запрос AJAX на ваш собственный серверный скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...