我正在尝试使用jQuery的. ajax函数向IPINFODB的API发送请求,以获取访问我们网站的用户的地理位置。
问题是,从我可以收集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,等等,但仍然没有。有人知道通过AJAX向这个API发出请求的另一种方法吗?最好不要使用YQL
这可以通过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 Key。
我最近实现了一个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
}
如果远程服务器不支持JSONP,由于同源策略的限制,你不能直接从javascript调用它(当然,除非你编写自己的浏览器和javascript的实现不尊重这个策略)。
为了解决这个限制,你可以在你的域上写一个服务器端脚本,它将作为你的域和远程域(api.ipinfodb.com)之间的桥梁,然后将AJAX请求发送到你自己的服务器端脚本。
试试这个url:
http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>&format=json&callback=?
…并通过GET(leave data empty)发送请求
http://ipinfodb.com/ip_location_api_json.php你可以在你的web应用程序中写一个webmethod,从你的服务器做一个webquest。从本质上讲,您正在使用另一个函数包装调用,然后您可以调用您的函数,因为它是相同的起源。