使用broadbandmap.gov json服务错误

时间:2011-08-21 22:42:01

标签: json jquery jsonp

我正在尝试使用来自broadbandmap.gov的json服务,这样我就可以在一个区域内显示宽带提供商及其速度。这是一个示例网址:

http://www.broadbandmap.gov/internet-service-providers/70508/lat=30.1471824/long=-92.033638/%3Ejson

我正在使用jquery来使用该服务,但它在firebug中给我一个无效的标签错误:

var url = "http://www.broadbandmap.gov/internet-service-providers/70508/lat=30.1471824/long=-92.033638/%3Ejson";
        //var url = "http://www.broadbandmap.gov/broadbandmap/broadband/fall2010/wireline?latitude=" + lat + "&longitude=" + long + "&format=json";

        $.ajax({
            url: url,
            dataType: 'json',
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            success: function (result) {
                console.debug("in success");
                console.debug(result);
                //success, execute callback function.
            },
            error: function (result) {
                console.debug("in error");
                console.debug(result);
            }
        });

奇怪的是,在Firebug中的Invalid Label错误下,它实际上有正确的响应:

{ “状态”: “OK”, “RESPONSETIME”:7, “MESSA ... // www.cscic.state.ny.us/broadband /”}}}

我已经尝试将dataType设置为json,jsonp和其他类型也无济于事。我也尝试过GET而不是POST,但这也没有用。有谁知道我错过了什么?

2 个答案:

答案 0 :(得分:1)

发生此错误是因为服务正在返回JSON而不是JSONP。您的浏览器不允许您从跨域源直接处理JSON。

为了使服务返回JSONP,您必须使用特殊格式的URL。如果您在没有“/> json”修饰符(link)的情况下转到搜索结果页面,则会在页面上看到“API调用”的链接。如果将鼠标悬停在此链接上,它将为您提供用于无线/有线API调用的正确URL。在您的ajax调用中使用其中一个URL与JSONP返回类型&回调,你应该全部设置。

我在http://jsfiddle.net/qsY7h/1/创建了一个更新的小提琴。

答案 1 :(得分:0)

这是一个跨域请求,因此您应该使用JSONP数据类型 - API支持此返回类型。您在示例中提供的网址没有为我返回任何内容,因此我检查了Broadbandmap's Developer Docs并找到了备用电话。请在http://jsfiddle.net/szCAF/找到一个示例。

最重要的一点是“回调=?”在URL中。 jQuery使用它来告诉API在输出中包含哪些函数名称(这都是由jQuery透明地完成的)。