从Unified Sweden公共API调用jjax数据的问题

时间:2017-04-06 10:45:50

标签: javascript jquery json opendata

希望通过我的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在下面发布的代码

2 个答案:

答案 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会返回无用的错误。