联合国粮农组织API - 如何通过JS使用此API执行POST数据请求?

时间:2016-06-20 18:52:47

标签: javascript ajax api post

我正在尝试向联合国粮食及农业组织(联合国粮农组织)API发出POST请求(通过JavaScript AJAX)以获取一些数据点。虽然我已成功完成对此API的GET请求而没有任何问题,但POST请求会一直失败。我已经用许多其他API完成了这种类型的请求,但是这个我无法弄清楚。

我的代码和与API相关的网址如下。

有人可以帮我成功完成对此FAO API的POST数据请求吗?修改我的代码或创建自己的示例代码都没关系。

API端点在这里: http://fenixapps2.fao.org/api/v1.0/en/data/

API的技术说明如下: http://fenixapps2.fao.org/api/v1.0/

'示例页面'这个API在这里: http://faostat.github.io/faostat-api/

'展示页面'这个API在这里: http://fenixapps.fao.org/repository/api/

我的代码 - 工作GET请求+非工作POST请求 - 如下所示 您可以将其剪切并粘贴到文本编辑器中,它将作为HTML文件使用。

<html>
<head>
    <script type='text/javascript' src='https://code.jquery.com/jquery-2.1.3.min.js'></script>
    <script type='text/javascript'>
        function test() {
            // (1) GET requests work fine.
            // Based on example by FAOSTAT (http://faostat.github.io/faostat-api/)
            $.ajax({
                type: 'GET',
                url:  'http://fenixapps2.fao.org/api/v1.0/en/classifications/QC',
                success: function(response) {
                    console.log("metadata GET response:");
                    console.log(response);
                }
            });

            // (2) POST requests do NOT work with my code.
            // Originally based on example by FAOSTAT (http://faostat.github.io/faostat-api/)
            // Modified per API description at: http://fenixapps2.fao.org/api/v1.0/
            $.ajax({
                url:  "http://fenixapps2.fao.org/api/v1.0/en/data/",
                traditional: true,
                data: {
                    "datasource": "production", //test
                    "output_type": "objects", //arrays
                    "api_key": "n.a.",
                    "client_key": "n.a.",
                    "lang": "en",
                    //"domain_code":"QC", //domain_code (from example page - http://faostat.github.io/faostat-api/) replaced by domain_codes?
                    "domain_codes": ["'QC'"],
                    //"thousand_separator": ",", //not mentioned at http://fenixapps2.fao.org/api/v1.0/, only on example page.
                    //"decimal_separator": ".", //not mentioned at http://fenixapps2.fao.org/api/v1.0/, only on example page.
                    "decimal_places": "2",
                    "List1Codes": ["'33'"],
                    "List2Codes": ["'2510'"],
                    "List3Codes": ["'15'"],
                    "List4Codes": ["'2007'","'2008'","'2009'","'2010'","'2011'","'2012'","'2013'","'2014'"],
                    "List5Codes": null,
                    "List6Codes": null,
                    "List7Codes": null,
                    "null_values": true,
                    //"group_by"
                    //"order_by"
                    //"operator"
                    "page_size":"100",
                    "limit": "10",
                    "page_number":1
                    //"show_codes"
                    //"show_flags"
                    //"show_unit"
                },
                type: 'POST',
                success: function(response) {
                    console.log("data POST response:");
                    console.log(response);
                }
            });
        }
    </script>
</head>
<body onload='test();'>
    <div id='out'></div>
</body>

--- --- UPDATE

我尝试更改data中的$.ajax()部分,以便创建的网址与FAO&#39;示例&#39;中的cURL示例的格式完全匹配。页面(http://faostat.github.io/faostat-api/)。但是,这并未改变API的响应。我的更新代码包含在下面 - 我认为新的console.log(urlPlusData);行应该反映代码为POST生成的完整URL。

<html>
<head>
    <script type='text/javascript' src='https://code.jquery.com/jquery-2.1.3.min.js'></script>
    <script type='text/javascript'>
        function test() {
            // (1) GET requests work fine.
            // Based on example by FAOSTAT (http://faostat.github.io/faostat-api/)
            $.ajax({
                type: 'GET',
                url:  'http://fenixapps2.fao.org/api/v1.0/en/classifications/QC',
                success: function(response) {
                    console.log("metadata GET response:");
                    console.log(response);
                }
            });

            // (2) POST requests do NOT work with my code.
            // Originally based on example by FAOSTAT (http://faostat.github.io/faostat-api/)
            // Modified per API description at: http://fenixapps2.fao.org/api/v1.0/
            $.ajax({
                url:  "http://fenixapps2.fao.org/api/v1.0/en/data",
                traditional: true,
                data: {
                    "datasource": "production", //test
                    "output_type": "objects", //arrays
                    "api_key": "n.a.",
                    "client_key": "n.a.",
                    "lang": "en",
                    //"domain_code":"QC", //domain_code (from example page) replaced by domain_codes?
                    "domain_codes": ["QC"],
                    //"thousand_separator": ",", //not mentioned at http://fenixapps2.fao.org/api/v1.0/, only on example page.
                    //"decimal_separator": ".", //not mentioned at http://fenixapps2.fao.org/api/v1.0/, only on example page.
                    "decimal_places": "2",
                    "List1Codes": ["33"],
                    "List2Codes": ["2510"],
                    "List3Codes": ["15"],
                    "List4Codes": ["2007","2008","2009","2010","2011","2012"],
                    "List5Codes": ["null"],
                    "List6Codes": ["null"],
                    "List7Codes": ["null"],
                    "null_values": true,
                    //"group_by"
                    //"order_by"
                    //"operator"
                    "page_size":"100",
                    "limit": "10",
                    "page_number":"1"
                    //"show_codes"
                    //"show_flags"
                    //"show_unit"
                },
                beforeSend: function (jqXHR, settings) {
                    urlPlusData = settings.url + "?" + settings.data;
                },
                type: 'POST',
                success: function(response) {
                    console.log("data POST response:");
                    console.log(urlPlusData);
                    console.log(response);
                }
            });
        }
    </script>
</head>
<body onload='test();'>
    <div id='out'></div>
</body>

0 个答案:

没有答案