jQuery JSON请求获取一个';200正常';回答但没有内容

jQuery JSON请求获取一个';200正常';回答但没有内容,jquery,json,header,request,ip,Jquery,Json,Header,Request,Ip,我使用jQuery通过访问者的IP地址获取他们的位置。有一个很棒的服务叫做。我所需要做的就是在URL的末尾添加“json”或“xml”,然后添加IP地址,它将返回所需的数据 当我在浏览器中手动执行此操作时,它会起作用:我可以下载一个小文档。当我从浏览器执行$.ajax或$.getJSON请求时,它会使用“200ok”标题和下面的元数据进行响应。但没有实际数据。发生什么事了 编辑:我添加了javascript/jQuery代码: function openForm(event,ui){ v

我使用jQuery通过访问者的IP地址获取他们的位置。有一个很棒的服务叫做。我所需要做的就是在URL的末尾添加“json”或“xml”,然后添加IP地址,它将返回所需的数据

当我在浏览器中手动执行此操作时,它会起作用:我可以下载一个小文档。当我从浏览器执行$.ajax或$.getJSON请求时,它会使用“200ok”标题和下面的元数据进行响应。但没有实际数据。发生什么事了

编辑:我添加了javascript/jQuery代码:

function openForm(event,ui){
    var _this = $(this);
    //Get details on the user's IP
    var myIP = $('#yourIP').attr('ip');alert(myIP);
    var url = 'http://freegeoip.appspot.com/json/' + myIP;
    $.ajax({
        url: url,
        dataType: 'json',
        contentType: 'text/json',
        timeout: 10000,
        complete: function(ip){
            alert('Success Ajax!');
            //URL returns status,ip,countrycode,countryname,regioncode,regionname,city,zipcode,latitude,longitude
            $('#yourIP').text(ip.city + ", " + ip.countryname +  " at " + ip.latitude + " latitude.");
            $('#yourIP').attr({'city': ip.city,'country': ip.countryname});
        }
    });

RESPONSE HEADERS
Cache-Control   no-cache
Content-Type    text/json
Expires Fri, 01 Jan 1990 00:00:00 GMT
Content-Encoding    gzip
Date    Fri, 17 Dec 2010 15:26:48 GMT
Server  Google Frontend
Content-Length  156

REQUEST HEADERS
Host    freegeoip.appspot.com
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)
Accept  application/json, text/javascript, */*; q=0.01
Accept-Language nl,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Content-Type    text/json
Referer http://www.freshbase.nl/permaculture/index.php
Origin  http://www.freshbase.nl

200只意味着请求正确返回,没有错误。这是一个成功的请求


成功的请求不能返回任何内容,就像SQL查询不返回任何记录一样。

这是因为您的运行违反了jQuery AJAX特性中使用的XMLHttpRequest对象的跨域请求限制。一些浏览器在出现这种情况时会抛出一个空的200响应(这令人困惑)


您需要使用支持JSONP的服务来避免跨域问题,或者使用同一域上的服务器端代理作为本地中介。

您正在尝试执行跨站点Ajax请求。浏览器会阻止这种对安全性有害的操作。请看这里如何解决您的问题:

,只需添加一个jsoncallback作为querystring参数即可

var url = 'http://freegeoip.appspot.com/json/' + myIP + "&jsoncallback=?;

$.getJSON(url,
        function(data){

        });

所以我解决了我自己的问题!感谢大家引导我走上了一些道路,帮助我更多地了解跨站点请求、JSONP等

这真的很简单。希望包含这些数据的页面由PHP组成。因此,我在PHP中添加了以下两行:

$myIP = $_SERVER['REMOTE_ADDR'];
$myGeoData = file_get_contents('http://freegeoip.appspot.com/json/' . $myIP);
然后在页面的适当位置回显这些变量,以便jQuery拾取并执行操作

因此,如果web服务以文件或普通字符串的形式交付其数据,则获取并开始使用该数据所需的全部内容就是文件内容


您可以在将整个页面发送到浏览器之前使用PHP获取该命令,也可以在自己的服务器上使用该命令向专门构建的PHP脚本发出Ajax请求。再次感谢各位

您应该提供一段代码,因为您可能没有正确配置$.ajax()函数。为什么不能从请求头获取远程地址?我支持这个想法去看代码。当然,代码就要来了!顺便说一下,抓取远程地址会得到IP地址,但我需要的是基于IP地址的附加位置信息。基本上是城市和国家。@用户浏览器不允许您对存在于另一个域中的文件发出请求,如果是这样,您必须使用带有回调的getjsonp作为查询字符串。谢谢,我(只是)知道这一点。问题是,当我从Javascript请求URL时,我没有从URL获取任何数据,而如果我只是在浏览器地址栏中键入URL,它确实会提供承诺的数据。那么问题出在哪里呢?谢谢,您使用的术语对我来说很复杂,但我将使用JSONP作为搜索术语来了解更多信息。您可以搜索的JSONP的一个简单示例是使用jQuery使用Twitter或Flickr API。您将发现许多使用JSONP的示例。您正在使用的服务必须支持JSONP才能实现这种方法。不过,您好,这似乎不起作用。该提供程序似乎不提供JSONP格式,只提供JSON。