0

希望在我对瑞典统计局 (SCB) 的 ajax 调用中获得帮助来识别问题。
SCB API 说明在这里

我可以通过以下调用成功获取表元数据(说明中的步骤 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 在下面发布的代码

4

2 回答 2

1

我不是javascript专家,但我遇到了同样的问题。我通过调用 JSON.stringify 将 json 查询(发布数据)转换为字符串来解决它

http://jsbin.com/punaveteke/edit?js,控制台,输出

$(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)
        }
    });
});
于 2017-04-12T07:47:39.663 回答
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 返回了无用的错误。

于 2017-04-06T13:26:00.890 回答