2017-04-06 26 views
0

希望能够通过对瑞典统计局(SCB)的ajax调用来帮助识别问题。
SCB API instructions are hereAjax调用json数据的问题来自瑞典统计公共API

我能顺利拿到下面呼叫

$.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) 
    } 
}); 

不过,我收到404未找到错误,当我尝试以下查询表用POST表的元数据(步骤4.3说明)请求。
(例如从步骤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

你的数据格式是错误的尝试适合作为在4.3 PDF –

+0

定步骤@MudassarZahid你能否以正确的ajax调用为例来扩展你的答案?你的回答很不清楚。 – seablue

回答

1

我不是javascript的专家,但我有同样的问题。我解决它通过调用转换JSON查询(POST数据)作为字符串JSON.stringify看到

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) 
     } 
    }); 
}); 
+0

谢谢,修复它。 我尝试了几个其他查询,现在工作得很好。 我很感激帮助! – seablue

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

+0

GET请求仍然只是为表返回元数据,而不是查询结果,我相信? 它返回一个表格标题为“出生国家,出生国家,年龄,观察和年份”的对象。然后是变量列表:“出生国”,“年龄”,“出生次数”和“年份”,每个变量都列出所有可用的字段,但不幸的是没有数据 – seablue

+0

我不想评论 - 我不喜欢不知道应该期待什么样的确切内容,但是它修正了404错误,如果这样做的话,如果做一个POST应该返回不同的值,但是你会得到一个404,那么这个文档就会以不同的方式出错,或者API实现被破坏,无论哪种方式,你都应该向维护者查询它是否尝试过改变查询参数(或许用更简单的方法?)来查看你是否得到了结果? – ADyson

+0

是的,我已经完成了几个简单的查询。他们实际上有一个网站,您可以搜索数据,然后它会为您生成API查询。在此页面上的示例。 http://www.statistikdatabasen.scb.se/pxweb/en/ssd/START__BE__BE0101__BE0101A/BefolkningNy/table/tableViewLayout1/?rxid=82f98882-d1b8-4a2c-90ca-2483b1bc4e5f 点击底部的链接“此表的API ”。 但如你所说,我会联系他们。也许他们做了一些改变。 感谢您检查我的语法没有出现明显的错误。 – seablue