调用API

时间:2016-12-23 02:52:24

标签: javascript

我想在一个请求中多次调用API。目的是动态更改每个请求的日期参数,以便我一次获得不同日期的数据。

我在研究时看到了以下代码。它为一个请求存储我的数据:

var myjson;
$.getJSON("http://127.0.0.1:8080/horizon-update", function(json){
    myjson = json;
});

但是如何使用不同的日期参数进行多次调用,同时将不同的输出作为json从API中存储?

2 个答案:

答案 0 :(得分:0)

您可以简单地创建一个接受参数的函数,并使用参数两倍 - 一个用于请求,还用于“存储”结果

var myData = {};
function getDate(date) {
    $.getJSON("http://127.0.0.1:8080/horizon-update?date="+date, function(data){
        myData[date] = data;
    });
}
getDate('date1');
getDate('date2');
getDate('date3');

但是,这些代码都没有考虑请求的异步性质,但问题中的代码也没有

注意:我在回调中更改了结果对象的名称,并且存储了结果的var以反映不是JSON 的事实 - 返回的数据可能是,但是jQuery。 getJSON将解析后的JSON作为普通的'javascript对象

返回

你更有可能想要这样的东西

function getDate(date) {
    return $.getJSON("http://127.0.0.1:8080/horizon-update?date="+date);
}
$.when(getDate('date1'), getDate('date2'), getDate('date3'))
.then(function(result1, result2, result3) {
    // the results are in
})

当然,如果调用的数量是“动态的”,那就更复杂一些了(尤其是使用jQuery.when)

function getDate(date) {
    return $.getJSON("http://127.0.0.1:8080/horizon-update?date="+date);
}
var dates = ['date1', 'date2', 'date3'];
$.when.apply($, dates.map(function(date) {
    return getDate(date);
}).then(function() {
    // the results are in arguments[]

})
  

现在,当jQuery.getJSON返回thenable(承诺)时 - 你可以使用Promise.all使代码更容易 - 如果你想支持IE,你需要{{{ 3}} - 这个是Promise polyfill中链接的那个 - 但实际上有几十个选项

function getDate(date) {
    return $.getJSON("http://127.0.0.1:8080/horizon-update?date="+date);
}
var dates = ['date1', 'date2', 'date3'];
Promise.all(dates.map(function(date) {
    return getDate(date);
}).then(function(results) {
    // results is an array of the results - in the same order as the dates array
})

答案 1 :(得分:0)

也许你可以使用

jquery.each(array,callback)
callback is a function(integer indexOfArray,object value)
or function(String propertyName,object value)

首先,您可以使用date参数构造整个url,然后将它们放入数组中。然后为每个url参数应用相同的函数 并使用jquery.each()方法,