使用jQuery读取JSON的客户端Ajax

时间:2012-10-21 21:20:09

标签: javascript ajax jquery javascript-events

我正在尝试制作一个Javascript来获取json(IP DATA)并使用AJAX从它(GEO IP)中检索数据,这是我到目前为止所拥有的

$(document).ready(function(){
    var path_to_the_webservice = "http://www.pathtothescript.com/check.php";
    $.ajax({
        url: path_to_the_webservice,
        success: function(html)
        {
            if(html)
            {
                alert('3');
                $('#content').append(html);                         
            }
            else
            {
                alert('4');
            }
        }
    });
});

我得到警报(4),为什么?

基本上,当您从浏览器访问http://www.pathtothescript.com/check.php时,请重新启动我必须使用

解析的JSON
$.getJSON(path_to_the_json,
function(data) 
{
    $.each(data, function(i,item)
    {

    });
}

但我不确定如何制作它。

json看起来像http://j.maxmind.com/app/geoip.js

有任何帮助吗?谢谢!

1 个答案:

答案 0 :(得分:0)

可能由Same origin policy引起。

尝试使用JSONP请求:

$.getJSON('http://example.com?callback=?', function(data) {
    console.log(data);
});

处理来自http://j.maxmind.com/app/geoip.js

的回复
// Actually we can send regular AJAX request to this domain
// since it sends header Access-Control-Allow-Origin:*
// which allows cross-domain AJAX calls.
$.get('http://j.maxmind.com/app/geoip.js', function(data) {

    console.log('Retrieved data:',
                data,
                'is type of', typeof data);

    // Now we have some functions to use:
    console.info('Some info:', geoip_country_name(),
                geoip_latitude(),
                geoip_longitude());
});​

Fiddle


<强>更新

在聊天中,我们发现我之前的示例在Google Chrome中运行良好,但在Mozilla Firefox中不起作用。 虽然我玩了一点,但找到了解决方案:

// Actually we can send regular AJAX request to this domain
// since it sends header Access-Control-Allow-Origin:*
// which allows cross-domain AJAX calls.
$.ajax({
    url: 'http://j.maxmind.com/app/geoip.js',
    type: 'GET',
    success: function(data) {
        // Now we have some functions to use:
        alert(geoip_country_name() + ': (' 
              + geoip_latitude() + '; ' 
              + geoip_longitude() + ')');
    },
    error: function(e) {
        console.log('Error:', e);
    },
    contentType: 'application/javascript; charset=ISO-8859-1',
    dataType: 'script'
});

Fiddle
我也相应地设置了一个charset来服务documentation