我试图使用jquery和json来消费今日美国人口普查API json服务。下面是代码:
var url = "http://api.usatoday.com/open/census/locations?api_key=yourapikeyhere&keyname=FIPS&sumlevid=3&keypat=36069&format=jsonp&callback=?";
$.ajax({
url: url,
dataType: 'jsonp',
type: 'GET',
contentType: "application/json; charset=utf-8",
success: function (result) {
console.debug(result);
}
});
如果我在浏览器中点击url,这是有效的json:
{"request":{
"keyname":"FIPS",
"keypat":"36069",
"sumlevid":"3",
"year":"2010"},
"response":[
{"Placename":"Ontario","PlacenameFull":"Ontario County, N.Y.","FIPS":"36069","GNIS":"974133","StateAP":"N.Y.","StatePostal":"NY",
"PctChange":"0.0768977",
"Pop":"107931","PctHisp":"0.03408700","PctNonHisp":"0.96591300","PctWhite":"0.93650600","PctNonHispWhite":"0.91835500","PctBlack":"0.02253300","PctAmInd":"0.00255700","PctAsian":"0.01043300","PctNatHawOth":"0.00022200","PctTwoOrMore":"0.01666800","PctOther":"0.01108100","USATDiversityIndex":"0.16165100","PopSqMi":"167.60000000","LandSqMi":"644.10000000","WaterSqMi":"18.50000000","TotSqMi":"662.50000000","Lat":"42.8566949000","Long":"-77.3032768000","HousingUnits":"48193","PctVacant":"0.10736000"},
"End"
]}
Firebug给出"invalid label"错误并且不返回结果。什么好主意吗?
我更新了服务器,以支持JSONP。(我本来可以早点做的,但我刚度假回来。)
您使用的API似乎不支持JSONP(响应没有封装在函数调用中)。当脚本执行时,它会导致语法错误,因为哈希字面值({...}
)不允许作为顶级语句。
确保API支持JSONP,如果支持,请确保为callback
参数使用正确的名称。
如果它不支持JSONP,你必须通过服务器端语言调用它(或代理请求它)。
JSONP通过在函数调用中包装javascript文字来工作,例如:
jsonp_callback({the: "response"});
如果你实现了函数jsonp_callback()
并执行了这个脚本,你的函数将收到响应。
服务器必须显式支持JSONP才能正常工作