Получение нескольких файлов JSON в одной функции

#javascript #jquery #angularjs #json #jsonp

#javascript #jquery #angularjs #json #jsonp

Вопрос:

Структура ссылки JSON выглядит следующим образом:

www.something.com/link —номер-rest-of-the-link.com.json

Теперь мне нужно получить несколько файлов ссылок JSON, и единственное, что меняется, — это номер в приведенной выше ссылке. Допустим, оно варьируется от 10 до 40, поэтому первое выглядит так:

www.something.com/link —10-rest-of-the-link.json

а вторая выглядит так

www.something.com/link —11-rest-of-the-link.com.json

и так далее, пока не достигнет числа 40.

Есть ли способ, которым я могу получить все это в одной функции. Я пробовал это:

 var nmr = function({for(nmr=10;nmr<40;nmr  )});

var json = 'www.something.com/link' nmr 'rest-of-the-link.json';
  

но это не сработает.

Есть ли способ добиться этого?

Пожалуйста, обратите внимание, что я не вставил часть «http», поскольку SO автоматически связывает ее.

Спасибо.

Комментарии:

1. Да, вы можете объединить результат нескольких вызовов в одном объекте : для каждого числа из заданного диапазона выполните вызов и добавьте ответ в массив, который вы вернете

2. как вы волшебным образом получаете json непосредственно из URL-адресов?

3. Пожалуйста, предоставьте образец. Спасибо.

4. @madalin, отредактировано.

5. @tholo что вы отредактировали, где ваш запрос ajax?

Ответ №1:

вы можете создать массив следующим образом

 var links = [];
for(var i=2005;i<2015.length;i  ){
  links.push('http://www.link.com/an-' i '-rest');
}
//now make your request for each link
  

другой пример

 var requested = 0;
  function startLoading(){
    if(requested==2015) {
      return alert("all files loaded");
    }
    makeRequest('http://www.link.com/an-' requested '-rest');
  }

  function makeRequest(url){
    //the body of request
    //then
    //if response is ready make what you want for it and go next
    requested  ;
    startLoading();
    // and startLoading(); to go to the next link
  }

  startLoading(); //start
  

Ответ №2:

Попробуйте вот так,

 var json = [];
for(var i = 10; i <= 40; i  ) {
   json.push('www.something.com/link-' i '-rest-of-the-link.json');
}
  

Теперь json все ссылки будут от 10 до 40. Если вы хотите получить содержимое, используйте ajax для этого

Ответ №3:

концепции

  • сгенерируйте массив обещаний, которые будут вызывать каждый файл json из url

  • выполняйте каждое обещание одновременно

пример

 const Promise = require('bluebird')
const rp = require('request-promise')

function getJsonFromUrlParam(num) {
  const uri = `www.something.com/link-${num}-rest-of-the-link.json`

  return rp({ method: 'GET', uri, json: true })
}

/** declare param */
const params = []

for (let i = 10; i <= 40; i  ) {
  /** get each promise param */
  params.push(getJsonFromUrlParam(i))
}

/** get each json file in the same time */
Promise.all(params)
  .then(result => {
    /** get result here 
     * result is array of json files
     */
     console.log(result)
  })
  

Комментарии:

1. как мы можем сделать это в версии v1?