跨域jQuery .AJAX问题

时间:2011-08-29 22:08:17

标签: jquery ajax api cross-domain

我正在尝试使用jQuery的.AJAX函数向IPINFODB的API发送请求,以获取访问我们网站的用户的地理位置。

问题是,从我可以收集jQuery的.AJAX函数不允许跨域请求,反过来,什么都不返回。

以下代码提醒[空白]

$.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。

5 个答案:

答案 0 :(得分:3)

这可以通过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密钥替换API_KEY

答案 1 :(得分:1)

我最近为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
}

答案 2 :(得分:0)

如果远程服务器不支持JSONP,由于same origin policy限制,您无法直接从javascript调用它(除非您编写自己的浏览器并执行不遵守此策略的javascript )。

要解决此限制,您可以在域上编写一个服务器端脚本,它将充当您的域和远程域(api.ipinfodb.com)之间的桥梁,然后将AJAX请求发送到您自己的服务器端脚本。

答案 3 :(得分:0)

试试这个网址:

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

...并通过GET发送请求(保留数据为空)

http://ipinfodb.com/ip_location_api_json.php

答案 4 :(得分:0)

您可以在Web应用程序中编写一个web服务器,从您的服务器执行webrequest。本质上,你用另一个函数包装调用然后你可以调用你的函数,因为它是相同的原点。