希望通过我的ajax调用瑞典统计局(SCB)获得帮助来确定问题 SCB API instructions are here
我可以通过以下调用
成功获取表格元数据(说明中的步骤4.3)$.ajax({
url: "http://api.scb.se/OV0104/v1/doris/en/ssd/BE/BE0401/BE0401B",
type: "POST",
dataType: 'json',
success: function(response) {
console.log(response);
},
error: function(xhr) {
console.log(xhr.statusText)
}
});
但是,当我尝试下面用POST请求查询表时,我收到404错误未找到 (示例摘自说明中的步骤4.4 - PDF格式第7页的下半部分)
或者,如果我尝试使用GET请求,我只是得到表格元数据而没有结果
$.ajax({
url: "http://api.scb.se/OV0104/v1/doris/en/ssd/BE/BE0401/BE0401B/BefProgFoddaMedel15",
data: {
"query":
[{"code":"Fodelseland", "selection":{"filter":"item",
"values":["010","020"]}},
{"code":"Alder", "selection":{"filter":"all", "values":["*"]}},
{"code":"Tid", "selection":{ "filter":"top", "values":["3"]}}],
"response": {"format":"json"}
},
type: "POST", // GET returns only table metadata
dataType: 'json',
success: function(response) {
console.log(response);
},
error: function(xhr) {
console.log(xhr.statusText)
}
});
修改
补充说,还尝试了GET请求但只返回表元数据而不是统计信息
解
在发布之前对查询数据调用JSON.stringify
Petros Likidis在下面发布的代码
答案 0 :(得分:1)
我不是javascript专家,但我遇到了同样的问题。我通过调用JSON.stringify参见
将json查询(post数据)转换为字符串来解决它http://jsbin.com/punaveteke/edit?js,console,output
$(document).ready(function () {
$.ajax({
type: "POST",
url: "http://api.scb.se/OV0104/v1/doris/en/ssd/BE/BE0401/BE0401B/BefProgFoddaMedel15",
data: JSON.stringify({
"query": [{
"code": "Fodelseland",
"selection": {
"filter": "item",
"values": ["010", "020"]
}
}, {
"code": "Alder",
"selection": {
"filter": "all",
"values": ["*"]
}
}, {
"code": "Tid",
"selection": {
"filter": "top",
"values": ["3"]
}
}],
"response": {
"format": "json"
}
}),
dataType: "json",
success: function (response) {
console.log(response);
},
error: function (xhr) {
console.log(xhr.statusText)
}
});
});
答案 1 :(得分:0)
文档似乎有误。如果您将其作为GET
请求(而不是POST
)运行,则会返回结果。
$.ajax({
url: "http://api.scb.se/OV0104/v1/doris/en/ssd/BE/BE0401/BE0401B/BefProgFoddaMedel15",
data: {
"query":
[{"code":"Fodelseland", "selection":{"filter":"item",
"values":["010","020"]}},
{"code":"Alder", "selection":{"filter":"all", "values":["*"]}},
{"code":"Tid", "selection":{ "filter":"top", "values":["3"]}}],
"response": {"format":"json"}
},
type: "GET",
dataType: 'json',
success: function(response) {
console.log(response);
},
error: function(xhr) {
console.log(xhr.statusText)
}
});
实际上,API应该返回" 405(方法不允许)"错误,这将给你一个更好的线索,为什么请求失败。资源不缺少(如404所示),只需要通过不同的方法访问它。
可能值得向API的维护者强调他们的文档是错误的,并且他们的API会返回无用的错误。