jQuery JSON请求获得'200 OK'的答案,但没有内容 [英] jQuery JSON request gets a '200 OK' answer but no content
问题描述
我使用jQuery通过IP地址获取访问者的位置。这种称为的服务非常棒。我所需要做的就是在URL末尾加上'json'或'xml',然后添加IP地址,它将返回所需的数据。
I am using jQuery to get visitor's location via their IP address. There's a great service for this called freeGeoIP. All I need to do is tack 'json' or 'xml' at the end of their URL, then add the IP address, and it will return the required data.
当我在浏览器中手动执行此操作时,它可以正常工作:我下载了一个小文档。当我从浏览器执行$ .ajax或$ .getJSON请求时,它会以'200 OK'标题和下面的元数据回答。但没有实际的数据进来。发生了什么?
When I do this manually in my browser, it works: I get a tiny document to download. When I do a $.ajax or $.getJSON request from the browser, it answers with a '200 OK' header and the metadata below. But no actual data comes in. What's going on?
编辑:我已经添加了javascript / jQuery代码:
I've added the javascript/jQuery code:
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
推荐答案
这是因为您与jQuery AJAX功能中使用的XMLHttpRequest对象的跨域请求限制发生冲突。一些浏览器在发生这种情况时会抛出一个空的200响应(这很令人困惑)。
That's because you're running afoul of the cross-domain request limitation of the XMLHttpRequest object used in jQuery's AJAX features. Some browsers throw an empty 200 response when that happens (which is confusing).
您需要使用支持JSONP的服务来规避跨域问题,或者在同一个域上使用服务器端代理来充当本地中介。
You need to either use a service that supports JSONP, to circumvent the cross-domain issue, or use a server-side proxy on the same domain to act as a local intermediary.
这篇关于jQuery JSON请求获得'200 OK'的答案,但没有内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!