2016-12-23 3 views
0

Я немного новичок в javascript, поэтому, пожалуйста, со мной. Я хочу вызвать API несколько раз в одном запросе. Цель состоит в том, чтобы динамически изменять параметры даты для каждого запроса, чтобы я получал данные за разные дни одновременно.динамически изменять параметры URL при вызове API

Я видел следующий код во время исследования. Она хранит свои данные для одного запроса:

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

Но как я могу сделать несколько звонков с разными параметрами даты при хранении различных результатов в формате JSON с API?

+2

'с разными параметрами даты '- параметры даты? не видите ЛЮБЫЕ параметры в коде, который вы отправили –

+0

@JaromandaX это можно сделать? Возможно, вы можете помочь в процессе мышления, как это сделать, а также с некоторой документацией. Тогда, может быть, я смогу попробовать что-то значимое. – Etch

+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 возвращает разобранный JS ПО как простой ПР»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, вам нужно Promise polyfill - это один является один связан в MDN Promise docs - но есть буквально десятки вариантов

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

Возможно, что-то, что использует 'Promise.all', может быть полезно. –

+0

Да, швырялся с помощью собственных обещаний –

0

может быть, вы можете использовать

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

Сначала вы можете построить весь URL с параметром даты, затем поместите их в массив. затем примените ту же функцию для каждого параметра url И используйте метод jquery.each(),

Смежные вопросы