AJAX请求从URL获取IP

时间:2013-11-20 16:08:02

标签: jquery

我有一个网址,让我们说“www.google.com”,我想知道相应的IP。我只有javascript和jQuery。

以下网址:http://www.fileformat.info/tool/rest/dns.json?q=google.com输入浏览器的地址栏后会显示以下JSON结果:

{"result":{"message":"OK","code":200},"answer":{"message":"successful","values":[{"address":"74.125.228.7","ttl":300},{"address":"74.125.228.3","ttl":300},{"address":"74.125.228.8","ttl":300},{"address":"74.125.228.9","ttl":300},{"address":"74.125.228.2","ttl":300},{"address":"74.125.228.0","ttl":300},{"address":"74.125.228.1","ttl":300},{"address":"74.125.228.4","ttl":300},{"address":"74.125.228.6","ttl":300},{"address":"74.125.228.14","ttl":300},    {"address":"74.125.228.5","ttl":300}],"code":0},"question":{"q":"google.com","type":"A"}}

太好了,这就是我需要的! 但是现在,当我尝试通过这个AJAX查询获得相同的结果时

$.ajax({
    url: 'http://www.fileformat.info/tool/rest/dns.json?q=www.google.com',
    success: function(data) {
        console.log(data);
    },
    error: function(a,b) {
        console.log(a, b);
    }
});

查询返回代码200,但是触发了错误回调,为什么?

Object { readyState=4, status=404, statusText="error", more...} error

我肯定错过了一些东西,但无法弄清楚是什么。我试图将'dataType'设置为每个可能的值或将参数放入'data'字段,但没有任何作用。这是某种交叉问题吗?

如果有人可以向我解释我做错了什么,以及如何实现我正在寻找的东西,我会很高兴。

2 个答案:

答案 0 :(得分:0)

试试这个解决方案

var addressArray = [];
for (x in data) {
   if (x == "answer") {
       var answer = data[x];
       for (y in answer) {

           if (y == "values") {
               var values = answer[y];
               for (z in values) {
                   var addressJson = values[z];
                   for (a in addressJson) {
                       if (a == "address") {
                           addressArray.push(addressJson[a]);
                        }

                   }

               }

           }

        }


   }


}

答案 1 :(得分:0)

好的,经过大量搜索后,我发现这是一个Cross Origin问题。 我通过使用JSONP解决了它,即我为服务提供了一个回调函数。

$.ajax({
    dataType: 'jsonp'
    url: 'http://www.fileformat.info/tool/rest/dns.json?callback=getIP&q=www.google.com',
});

function getIP(data) {
    console.log(data.answer.values[0].address);
}