我正在尝试使用来自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,但这也没有用。有谁知道我错过了什么?
答案 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透明地完成的)。